struts2模型驱动与属性驱动
1.使用模型驱动 ModleDriver
要求
1.要求Action必须实现一个接口ModelDriven.
重写getModel()方法.
2.要求在Action中必须实例化一个javaBean对象.
在getModel方法中将这个实例化后的对象返回.
注意:如果有嵌套对象,则必须指定嵌套属性的名称和参数名称,如Model对象中有Computer对象,Computer对象中有number属性,则要用computer.number
2.使用属性驱动
要求:
1.创建Action属性
2.设置set,get方法
注意:如果属性是javaBean对象,则页面传递参数名称应为对象名.参数名称,如user.name
Collection,Map参数传递:
Collection:<input type="text" name="b[0]" value="3"><br>
<input type="text" name="b[1]" value="3"><br>
map:<input type="text" name="map['a']" value="3"><br>
<input type="text" name="map['b']" value="3"><br>
3.自定义类型转换器
1.创建一个类去extends StrutsTypeconverter类(也可以是DefaultTypeConverter,StrutsTypeConverter)
2.重写类中的方法
convertFromString
这个方法有三个参数
第二个参数代表的是从页面传递的数据。
第三个参数代表的是要转换的类型.
convertToString
3.对自定义的类型转换器进行注册操作.
1.局部注册
在Action所在的包内创建一个ActionName-conversion.properties文件。
在文件中写上
属性名=类型转换器全名.
rect=cn.itcast.utils.MyConverter
--------------------------------------------------------------------------------------------------------------------
<form action="${pageContext.request.contextPath}/user1/user1_access.action" method="post">
姓名:<input type="text" name="user1.name"><br/>
年龄:<input type="text" name="user1.date"><br>
<input type="submit" value="提交">
--------------------------------------------------------------------------------------------------------------------
public class User1 {
private String name;
private Date date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
--------------------------------------------------------------------------------------------------------------------------
User1Action-conversion.properties
user1.date=cn.itcast.user.converter.MyConverter1
public class User1Action {
private User1 user1;
public User1 getUser1() {
return user1;
}
public void setUser1(User1 user1) {
this.user1 = user1;
}
public String access(){
System.out.println(user1);
return "success";
}
}
-----------------------------------------------------------------------------------------------------------------------
2.全局注册
在src下创建一个xwork-conversion.properties文件。
在文件中写上
待转换的类型=类型转换器全名
cn.itcast.domain.Rect=cn.itcast.utils.MyConverter
如果局部与全局转换器都存在,根据局部转换器处理.
注意:如何确定,转换哪个参数是通过页面参数名称和Action属性名称一一对应,框架读取参数是通过request.getParamterValues(name);
--------------------------------------------------------------------------------------------------------------------
<form action="${pageContext.request.contextPath}/user1/user1_access.action" method="post">
姓名:<input type="text" name="user1.name"><br/>
年龄:<input type="text" name="user1.date"><br>
<input type="submit" value="提交">
-------------------------------------------------------------------------------------------------------------------------------
xwork-conversion.properties
java.util.Date=cn.itcast.user.converter.MyConverter1
-------------------------------------------------------------------------------------------------------------------------------
public class User1 {
private String name;
private Date date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
-------------------------------------------------------------------------------------------------------------------------------
public class MyConverter1 extends DefaultTypeConverter{
@Override
public Object convertValue(Map context, Object value, Class toType) {
System.out.println("MyConverter.convertValue method run.........................................."+toType);
if(toType==Date.class){
String[] s=(String[]) value;
String[] split = s[0].split(",");
SimpleDateFormat sf=new SimpleDateFormat("yyyy/MM/dd");
Date parse=null;
try {
parse = sf.parse(split[0]);
} catch (ParseException e) {
sf=new SimpleDateFormat("yyyy-MM-dd");
try {
parse = sf.parse(split[0]);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return parse;
}
return super.convertValue(context, value, toType);
}
}
------------------------------------------------------------------------------------------------------------

浙公网安备 33010602011771号