注册类型转换器

简介:

仅仅为该应用提供类型转换器还不够,因为Struts 2依然不知道何时使用这些类型转换器,所以我们必须将类型转换器注册在Web应用中,Struts 2框架才可以正常使用该类型转换器。

Struts 2支持如下三种注册类型转换器的方式。

Ø  注册局部类型转换器:局部类型转换器仅仅对某个Action的属性起作用。

Ø  注册全局类型转换器:全局类型转换器对所有Action的特定类型的属性都会生效。

Ø  使用JDK 1.5的注释来注册类型转换器:通过注释方式来注册类型转换器。

1.局部类型转换器

与前面完全相似的是,注册局部类型转换器使用局部类型转换文件指定,只要在局部类型转换文件中增加如下一行即可:

<propName>=<ConverterClass>

将上面的<propName>替换成需要进行类型转换的属性、<ConverterClass>替换成类型转换器的实现类即可。下面是本应用中局部类型转换文件的内容。

程序清单:codes\04\4.1\LocalConverter\WEB-INF\src\org\crazyit\app\action\LoginAction-conversion. properties

#指定user属性需要使用UserConverter类来完成类型转换

user=org.crazyit.app.converter.UserConverter

至此,局部类型转换器注册成功。当浏览者提交请求时,请求中的user请求参数将被该类型转换器处理,即使用convertValue()方法将字符串转换成User实例。

局部类型转换器只对指定Action的特定属性起作用,这具有很大的局限性——我们花费了大量时间完成了一个类型转换器,却只能一次使用(对一个Action有效),这太浪费了。通常我们会将类型转换器注册成全局类型转换器,让该类型转换器对该类型的所有属性起作用。

2.全局类型转换器

局部类型转换器的局限性太明显了,它只能对指定Action、指定属性起作用。但如果应用中有多个Action都包含了User类型的属性,或者一个Action中包含了多个User类型的属性,使用全局类型转换器将更合适。

全局类型转换器不是对指定Action的指定属性起作用,而是对指定类型起作用,例如对所有类型为org.crazyit.app.domain.User类型的属性起作用。

注册全局类型转换器应该提供一个xwork-conversion.properties文件,该文件也是Properties文件,该文件就是全局类型转换文件,该文件直接放在Web应用的WEB-INF/classes路径下即可。

全局类型转换文件内容由多项“<propType>=<ConvertClass>”项组成,将<propType>替换成需要进行类型转换的类型、将<ConvertClass>替换成类型转换器的实现类即可。

下面是本应用中注册全局类型转换器的注册文件代码。

程序清单:codes\04\4.1\GlobalConverter\WEB-INF\src\xwork-conversion.properties

#指定org.crazyit.app.domain.User类型需要

#使用UserConverter类来完成类型转换

org.crazyit.app.domain.User=org.crazyit.app.converter.UserConverter

一旦注册了上面的全局类型转换器,该全局类型转换器就会对所有类型为lee.User类型的属性起作用。关于使用全局类型转换器的示例,请参考codes\04\4.1\路径下的GlobalConverter应用。

局部类型转换器只对指定Action的指定属性生效,全局类型转换器对指定类型的全部属性起作用。

3.关于局部类型转换器和全局类型转换器的说明

局部类型转换器是对指定Action的指定属性进行转换,不管该Action的该属性是数组也好,是List集合也好,该转换器的转换方法对该属性只转换一次;假如某个Action有个List<User>类型的属性users,那么局部类型转换器将只调用一次convertValue()方法,该方法把users请求参数一次性地转换为一个List<User>集合对象。

全局类型转换器会对所有Action的特定类型进行转换,如果一个Action的某个属性是数组或集合属性,而数组或集合元素是需要该转换器转换的方法,那么全局类型转换将不是对该集合属性整体进行转换,而是对该集合属性的每个元素进行转换。提示:

 

 

 

局部类型转换器对指定 Action 的指定属性起作用,一个属性只调用 convertValue() 方法一次。全局类型转换器对所有 Action 的特定类型起作用,因此可能对一个属性多次调用 convert Value() 方法进行转换—当该属性是一个数组或集合时,该数组或集合中包含几个该类型的元素,那么就会调用 convertValue() 方法几次。

 

 

本文转自fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/872264 ,如需转载请自行联系原作者

相关文章
|
3月前
|
存储 C++
C++ 操作重载与类型转换(二)
C++ 操作重载与类型转换(二)
43 2
|
3月前
|
自然语言处理 安全 C++
C++ 操作重载与类型转换(一)
C++ 操作重载与类型转换(一)
51 3
|
8月前
|
Java
对象类型转换
对象类型转换
27 0
|
4月前
|
移动开发 安全 C语言
C++:详解显式类型转换
C++:详解显式类型转换
|
9月前
|
程序员 编译器 C++
C++ 几种类型转换
C++ 几种类型转换
|
10月前
|
存储 安全 编译器
(强制)类型转换方法
(强制)类型转换方法
72 0
|
11月前
|
程序员
|
安全 编译器 C语言
【C++】类型转换
【C++】类型转换
【C++】类型转换
|
SQL 分布式计算 大数据
有类型转换_as | 学习笔记
快速学习有类型转换_as
53 0
有类型转换_as | 学习笔记
|
SQL 分布式计算 算法
无类型转换_选择 | 学习笔记
快速学习无类型转换_选择
56 0
无类型转换_选择 | 学习笔记