如果上面的类型转换器都是基于DefaultTypeConverter类实现的,基于该类实现类型转换器时,将字符串转换成复合类型要通过convertValue方法实现,将复合类型转换成字符串也是通过convertValue方法实现的,因此我们必须先通过toType参数来判断转换的方向,然后分别实现不同转换方向的转换逻辑。
|
理解了上面转换方向和方法之间的对应关系,我们可以更简单地实现自己的类型转换器,让自己的类型转换器继承StrutsTypeConverter类,并重写convertFromString方法和convertToString方法。
下面是基于StrutsTypeConverter实现的类型转换器代码。
程序清单:codes\04\4.1\StrutsTypeConverter\WEB-INF\src\org\crazyit\app\converter\UserConverter.java
public class UserConverter extends StrutsTypeConverter
{
//实现将字符串类型转换成复合类型的方法
//创建一个User实例
//只处理请求参数数组第一个数组元素,
//并将该字符串以英文逗号分割成两个字符串
//为User实例赋值
//返回转换来的User实例
//实现将复合类型转换成字符串类型的方法
//将需要转换的值强制类型转换为User实例
}
通过继承StrutsTypeConverter类来实现类型转换器,分别实现convertFromString和convertToString方法,这两个方法分别代表不同的转换逻辑——程序逻辑更加清晰。实际上就是将原来的convertValue方法拆分成两个方法。convertFromString方法参数与DefaultTypeConverter类中convertValue方法参数意义相同,注册该类型转换器的方法也和前面完全相同,此处不再赘述。
本文转自
fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/874444 ,如需转载请自行联系原作者