1.Struts2提供了非常强大的类型转换机制,Struts2的类型转换可以基于OGNL表达式,只要把HTTP参数(表单元素和其他GET/POST的参数)命名为合法的OGNL表达式。就可以充分利用Struts2的类型转换机制。Struts2提供了很好的扩展性,开发者可以非常简单的开发出自己的类型转化器,完成字符串和自定义符合类型之间的转换。Struts2的类型转化器提供了非常强大的表现层数据处理机制,开发者可以利用Struts2的类型转换机制来完成任意的类型转换。
2.Struts2内建的类型转换器
boolean和Boolean
char和Character
int和Integer
long和Long
float和Float
double和Double
Date
数组
集合:默认情况下,假定集合元素类型为String,并创建一个新的ArrayList封装所有的字符串
3.基于OGNL的类型转换
需要注意的两点:
因为Struts2将通过反射来创建一个符合类(User类)的实例,因此系统必须为该符合类提供无参数的构造器
如果希望使用user.name请求参数的形式为Action实例的user属性的name属性赋值,则必须为user属性对相应的复合类(User类)提供setName()方法,因为Struts2是通过调用该方法来为该属性赋值的。当然Action类中还应该包含setUser()方法。
4.指定集合元素的类型
类型转换文件就是一个普通的Properties(*.properties)文件,类型转换文件里提供了类型转换的相关配置信息
ActionName-conversion.properties形式,ActionName是需要Action的类名,后面的-conversion.properties字符串则是固定部分
Element_<ListPropName>=<ElementType>
Element_<MapPropName>=<KeyType>
Element_<MapPropName>=<ValueType>
5.自定义类型转换器
Struts2的类型转化器实际上依然是基于OGNL框架的,在OGNL项目中有一个TypeConverter接口,这个接口就是自定义类型转换器必须实现的接口
//OGNL提供的类型转换器接口
public interface TypeConverter{
public Object convertValue(Map context, Object target, Member member, String propertyName,
Object value, Class toType);
}
1)convertValue方法的作用
其作用最简单,该方法负责完成类型的转换,不过这种类型转换是双向的,通过判断toType的类型即可判断转换的方向,一旦通过toType类型判断了类型转换的方向后,就可以分别实现两个方向的转换逻辑了
2)convertValue方法参数和返回值的意义
第一个参数:context是类型转换环境的上下文
第二个参数:value是需要转换的参数
第三个参数:toType是转换后的目标类型
3)为什么value是一个字符串数组,而不是一个字符串
对于DefaultTypeConverter转换器而言,它必须考虑到最通用的情形,因此它把所有的请求参数都视为字符串数组,而不是字符串
6.注册类型转换器
Struts2支持如下3种注册类型转换器的方式:
注册局部类型转换器
注册全局类型转换器
使用JDK1.5的注释来注册类型转化器