一.概述
Struts2框架能够对常见类型进行自动类型转换(也就是系统的类型),但是自定义的类型,就必须自己编写类型转换了。类型转换分为两个方向的:客户端到服务器端和服务器端到客户端。类型转换既可以对单个属性(对象)也可以对批量属性(集合)。注意:类型转换器的执行顺序是在夹在两个控制器之间的。而且Struts2框架不需要我们处理类型转换失败,前提是核心控制器必须继承ActionSupport,由系统的conversionError拦截器自动处理,拦截器会将类型转换和输入校验等错误封装在ActionSupport方法里面了,存在于ActionContext对象中。
Struts2框架的类型转换分为三类:(1)8大数据类型和系统的类都能够实现自动类型转换。(2)如果前台的每一项输入是对应后台的对象的一个成员变量的,都可以通过前台OGNL实现类型转换(对象、List、MaP),后台类型明确的后台不需要编写任何附加代码,后台类型不明确(集合不适用泛型)的需要添加属性文件
XXXAction-conversion.properties。(3)当前台的每一项输入不对应后台对象的一个成员变量时就需要自定义类型转换了。例如:前台输入username;password 转为后台User对象,此时前台的一项输入已经对应一个对象了,而不是对象的成员变量,这种情况就需要自定义类型转换了。
二.关键技术(三项)
1前台OGNL实现类型转换:
(1)对于后台类型明确的只需在前台采用OGNL表达式即可(2)后台类型不明确的也只需在后台曾添属性文件即可。工程:ognlconverter
2编写自定义类型转换的步骤:
<1>编写一个继承DefaultTypeConverter或者继承
StrutsTypeConverter(推荐)类型转换类 。
<2>通知核心控制器:数据从前端控制器到核心控制器之间将会进行类型转换。即在核心控制器报下编写属性文件:XXXAction-conversion.properties
工程:customconverter
3.自定义类型转换失败提示
系统会自动将类型转换失败的字段的提示信息放到Field级别错误信息上(Map<String,List<String>>),我们通过在核心控制器目录下创建XXXAction.properties文件,实现自定义类型转换失败提示信息,然后在前台利用Struts2标签库输出提示
<s:fielderror></s:fielderror>
属性文件的定义可以看:ValidationAction.properties
工程:inputValidation(类型转换和输入校验是息息相关)
三.Demo工程
D:\Program Files (x86)\Workspaces\MyEclipse 10\struts2_convert
四.疑难解答
注意:表单中的input标签中的name值一定要和XXXAction核心控制器中的对象名一致,否则出错。
五.补充
1.全局类型转换。在src 目录下新建
xwork-conversion.properties,该文件的内容是待转换的类=转换器的名字,即
com.liujun.bean.User=com.liujun.converter.UserConverter2