详解Struts的类型转换

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的注释来注册类型转化器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值