struts2的类型转换器实际上是基于OGNL实现的,在OGNL的项目中有一个TypeConverter接口,这个接口就是实现类型转换器必须实现的接口。
//OGNL提供的类型转换器接口
一般应用的话可以继承DefaultTypeConverter,重写一下它的convertValue方法就好了,它只有三个参数,toType用于判断出现在这个转换器用于转换出什么类型的对象,在web应用中,一般就是String到对象,对象到String的转换,所以,我们需要先进行判断出转换的方向,在进行转换。我们也可以继承StrutsTypeConverter,它的两个方法,convertToString和convertFromString,顾名思义,就是这两个方向的装换,参数和都是一样的,需要注意的是,如果是从字符串装换成对象,这个参数是一个字符串数组而不是一个字符串,因为在表单中有可能具有相同name的表单域,所以这里的value是字符串数组。
配置方法可以总结为下面几种:
局部转换器配置:ActionName-conversion.properties
fileName = Converter
eg:user = yy.UserConverter
全局转换器配置:xwork-conversion.properties
yy.User = yy.UserConverter
对于集合的转换器配置我只学过局部的配置,如果哪位大侠知道全局的配置,请发出来学习学习。
List : Element_listName = List中复合类型,页面中使用方法:<s:property value="user[0].name" />
Map: Key_mapName = Key的类型,Element_mapName=Value的类型,页面中使用方法:<s:property value="user['key'].name" />
Set : KeyProperty_setName = 用于索引元素的属性,Element_setName=元素的类型,页面中使用方法:<s:property value="user('keyProperty').name" />
struts 先进行类型转换,后执行表单验证。如果类型转换出错,将不进行表单验证。
conversionError会封装在fieldError中