struts笔记 类型转换

struts2的类型转换,对于8个原生数据类型以及Date,String 等常见类型,struts2可以使用内建的类型转换器实现自动的转换,对于自定义的对象类型转换来说,就需要我们制定转换类型以满足需要。


Struts2自定义类型转换器分为局部类型转换器和全局类型转换器


(1)局部类型转换器 

1.首先要写一个类来继承DefaultTypeConverter 
2.然后覆盖convertValue这个方法,在里面进行数据转型 ,后面详细说明convertValue里面转换方法。
3.在action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是类名,后面的-conversion.properties是固定的写法,

4.Properties文件里面的内容为:属性名称=类型转换器的全类名

如  

user=com.strutsdemo.UserConverter

小结:

对于自定义类型转换器来说需要提供3个信息,Action的名字(ActionClassName),Action中待转换的属性名以及该属性对应类型转换器。其中,Action的名字是通过属性文件properties 的文件名来获得的,Action的待转换的属性名是通过properties中的key来获得,该属性对应的类型转换器是通过该key对应的value来获得的。


第2步中

覆盖convertValue方法里

必须采用if  else if 判断类型,这里以转换经典User为例

public Object convertValue(Map context,Object[] value,Class toTpye){
    if(User.class == toType){         //从页面向后台转换,这里 ==,equals都可以
        //task code
    }else if(String.class == toType){ //从后台向页面转换后,输出值
        //task code 
    }
}

if 判断中, value是表单提交的值

else if 判断中,value是后台到页面需要转换的值


也可以使用struts自带的类型转换器strutsTypeConverter简化类型代码的编写,strutsTypeConverter继承于DefaultTypeConverter父类,并且提供2个抽象方法

convertFromStirng与converToString,分别表示从页面的字符串转换为后台对象以及从后台对象转换为页面的字符串,不需要再判断方向。

顺便提一下strutsTypeConverter源码中,依然是if else if 判断方向。


批量转换

表单中提交相同name的值,可以用批量转换

转换方法中都是String value[]就是可以根据所以取到相同name提交的值。

其他同理


(2)全局类型转换器 
如果业务需求所有的日期都要转换,则可以使用全局类型转换器,只要在src根目录下面放置xwork-conversion.properties文件,并且properties文件中的内容为: 
待转换的类型=类型转换器的全类名 
如:java.util.Date = com.type.Converter.DateTypeConverter 即可 

你可能感兴趣的:(struts笔记)