Struts2类型转换器小结

时间:2022-05-22 17:49:12

    类型转换器

 

Struts2的类型转换器是基于OGNL表达式的,只要我们把HTML输入项命名为合法的表达式,就可以充分的利用Struts2内建的表达式机制。

1、Struts2内建的类型转换器

String、boolean/Boolean char/Chatacter int/Integer float/Float  long/Longdouble/Double

Date 数组类型 集合类型(collection、list、set),一般都可以完成转换。

2、使用集合类型转换时,可以(也可以不用,最好添加一个)添加一个ActionName-conversion.propertites文件,文件内容为Element_xxx=entity.XXXX;其中xxx为Action类中创建的集合对象,entity.XXXX为目标类型。该文件的位置为相关Action的同目录下,都在一个包里。如果不用配置文件,则需要使用泛型来指定目标类型。如List<User>

3、使用OGNL表达式和复合类型时,在表单中name属性和数据校验配置文件中要指定为“类型名.属性名”,否则无法识别。

4、类型转换异常拦截器。

      Struts2提供类型转换异常拦截处理机制,它提供名称为“conversionError”的拦截器,这个拦截器被注册在默认的拦截器栈中,如果Struts2在类型转换过程中出现问题,那么该拦截器就会进行拦截,并将异常信息封装在一个fieldError中,然后在视图页面中输出提示信息。

      改进类型转换器中的错误提示::

   1、 在src文件夹下建立国际化资源文件,在文件中输入:xwork.default.invalid.fielsvalue=“您输入的数据类型不符合要求!”

   2、 处理复合类型(包括集合类型)中的转化错误时,可以在action文件夹下添加ActionName.propertites文件,文件内容:例如

Element_registers=entity.Register

Invalid.foeldvalue.register[*].userAge=年龄必须为整数

5、自定义类型转化器

如果系统内建的类型转换器不能满足用户的要求,则可以自定义一个类型转换器。自定义类型转换器需要继承DefaultTypeConverter类,并重写convertValue()方法。或者使用struts2自带的类StrutsTypeConvert类,来简化编写。StrutsTypeConvert提供了两个抽象方法convertToString和convertFromString,实现这两个方法,便可实现类型转换。然后通过properties文件注册即可。自定义类型转换器需要明确三个参数,一是哪个Action中的属性需要转化,而是Action中哪个属性需要转换,三是转换的实现类是哪个,这些信息都可以在对应的.properties文件中体现出来。