Struts2自定义类型转换
1、Struts2类型转换的作用
在Web应用中,页面提交请求的参数都是字符串类型的。但是在学习中,我们都是直接在Action中按照需要来定义属性的类型,比如private int age,也没有出错,还能正确运行,这是怎么回事呢?这是由Struts2的类型转换框架默默的帮助我们完成的功能,只要用户输入的数据能合理的转换为需要的属性的类型,Struts2的类型转换框架就会在execute方法执行之前,替我们将参数转换为合适的类型。
2、Struts2自定义类型转换器
1、概述
虽然内建类型转换器能满足绝大多数的需求,但有的时候还是需要使用自定义类型转换器来实现特定的需求。这个时候就需要自定义类型转换器了。
2、实现自定义类型转换器
自定义类型转换器的实现非常简单,写一个类,继承StrutsTypeConverter抽象类,这个抽象类有两个方法需要我们实现:
public Object convertFromString(Map context, String[] values, Class toClass)方法,实现字符串向对象的转换,它有三个参数:
context:转换上下文,可以在里面引用各种对象,比如:可以通过context.get(ValueStack.VALUE_STACK)来引用值栈。
values:用户输入的字符串。
toClass:将要被转换成的对象类型。
public String convertToString(Map context, Object o)方法,实现对象向字符串的转换,它有两个参数:
context:同上,也是转换的上下文。
o:需要被转换的对象。
需要注意在convertFromString方法中,用户输入的字符串很可能是不符合要求的,所有的不符合要求的情况都要抛出TypeConversionException。这是个运行时异常,不需要在方法上声明抛出。
3、注册和引用自定义类型转换器
首先要注册这个自定义类型转换器处理。在src下建立一个xwork-conversion.properties文件,这个文件中用“全类名=这个类对应的类型转换器全类名”,来建立类和类型转换器的关系。放在src目录下属于全局的类型转换器。对局部类型转换,在action类所在的包下放置ActionClassName-conversion.properties文件,ActionClassName是类名,后面的-conversion.properties是固定的写法。
当然,在使用局部类型转换器引用的时候,只对这个文件名指定的Action有效,对其他Action无效。另外一个重要的点就是:局部类型转换器的引用会覆盖全局类型转换器的引用。