上篇我们说了如果在jsp页面访问某个对象的某个属性时,我们是采取“对象.属性”的语法进行的,可是如果要使用很多的属性,我们也这样来来回回的一个一个的写,是不是很麻烦?这节就是解决这个小问题的。
更简单的做法就是实现ModelDriven这个接口然后在他的getModel()方法中返回这个对象,在jsp页面直接调用这个对象的属性就可以了,具体做法是:
创建一个ModelDriven我们的Action类需要实现ModelDriven接口并且需要包括modelDriven拦截器。但是这个拦截器已经包含在默认的拦截器中,所以我们就不需要额外去配置了。
接下来就是实现getModel()方法,返回一个领域对象。当使用ModelDriven的方法时我们需要创建一个领域对象的实例,框架就会自动将数据传给对象,如User对象。
好了,建一个Action类继承ActionSupport类并且实现ModelDriven接口,代码如下所示:
package com.iman.action; import com.iman.model.User; importcom.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class UserAction1 extendsActionSupport implements ModelDriven<Object> { privateUser user=new User(); @Override publicObject getModel() { //TODO Auto-generated method stub returnuser; } @Override publicString execute() throws Exception { //TODO Auto-generated method stub returnSUCCESS; } publicUser getUser() { returnuser; } publicvoid setUser(User user) { this.user= user; } }
在Action中我们访问user对象的name,age的属性就可以用下面的语法了:
uer.getName(); uer.getAge(); ……
User类的代码如下所示:
package com.iman.model; public class User { private String name; private String sex; private int age; private String[] hobby; private String country; public User() { super(); // TODO Auto-generatedconstructor stub } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String[] getHobby() { return hobby; } public void setHobby(String[] hobby) { this.hobby = hobby; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
在jsp页面中,我们现在开始可以直接访问user的属性了:
....... name=”name”; name=”age” ……
注册表单register. jsp页面如下:
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s"uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>注册表单</title> </head> <body> <s:form action="userAction"> <s:textfield name="name"label="姓名"></s:textfield> <s:textfield name="age"label="年龄"></s:textfield> <s:radio name="sex"label="性别" list="{'男','女'}"></s:radio> <s:checkboxlist name="hobby"label="爱好" list="{'唱歌','跳舞','上网','睡觉'}"></s:checkboxlist> <s:select name="country"label="国家" list="{'中国','美国','英国'}"></s:select> <s:submit value="提交"></s:submit> </s:form> </body> </html>
注册信息mess.jsp页面如下所示:
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s"uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>用户信息</title> </head> <body> 注册信息 <hr> 姓名:<s:property value="name"/><br> 年龄:<s:property value="age"/><br> 性别:<s:property value="sex"/><br> 爱好:<s:property value="hobby"/><br> 国家:<s:property value="country"/> </body> </html>
打开服务器并部署项目,运行register.jsp页面如下所示:
注册信息展示页面mess.js如下所示:
可见效果是一样的,只是用这种方式在访问对象的属性时更简单,好了,今天就学习到这儿,附上struts.xml的配置文件代码:
<package name="modeldriven" extends="struts-default" namespace="/modeldriven"> <action name="userAction" class="com.iman.action.UserAction1"> <result name="success">/domain/mess.jsp</result> </action> </package>
这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7179417,谢谢~