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);
}
}

------------------------------------------------------------------------------------------------------------

 

posted @ 2015-12-20 19:10  Runny_Hao  阅读(111)  评论(0)    收藏  举报