一、 Struts2系统内建的类型转换器
Struts2框架可以自动转换常见的数据类型,开发者不用开发自己的类型转换器,这些
转换工作,完全可以交给系统来完成。Struts2框架支持如下类型转换:
预定义类型:例如 int、boolean、double等。
日期类型:使用当前区域(Local)的短格式转换,即
DateFormat.getInstance(DateFormat.SHORT)。
Collection 集合类型: 将request.getParameterValues(String arg)返回的字符串数
据与java.util.Collection转换。
Set 集合类型:与List的转换相同。
数组(Array)类型:将字符串数组的每一个元素转换成特定的类型,并组成一个数组。
二、 使用OGNL表达式
Struts2框架的进步之一就是支持OGNL表达式,允许开发者以简单的方式将用户请求参数转换为复合类型。例如:Action中有一个Book的复合类型属性,在JSP视图页面使用OGNL表达式为Book复合类型的实例对象book赋值:
<s:textfield name="book.bookname" label="书名"/>
<s:textfield name="book.author" label="作者"/>
<s:textfield name="book.price" label="价格"/>
上面代码使用了OGNL表达式“对象名称.属性名称”的形式,这是OGNL表达式的写法。在Struts2框架自动赋值的过程中,会自动调用类型转换器,将字符串类型转换为相应的属性类型。例如,price属性为一个double类型。这种转换系统自动完成。
注意:使用OGNL表达式为复合类型的实例对象的属性赋值,那么在该复合类型定义中,必须提供该属性的setter方法,因为Struts2框架是通过该方法来完成赋值的,而不是直接赋值该属性。例如,Book类中必须提供setBookname(String bookname) 方法才能实现OGNL表达式的赋值。
三、 类型转换中的异常处理
1、类型转换异常拦截器
为了捕捉在类型转换过程中产生的类型转换异常,Struts2框架的默认配置文件struts-default.xml中定义了一个conversionError类型转换异常拦截器。如果Struts2框架在类型转换过程中出现异常,那么该拦截器进行拦截,并将异常封装为一个fieldError(表单错误),保存在ActionContext中。
说明:使用类型转换异常拦截器的好处就是类型转换器不用关心异常的处理,只进行类型转换即可。 JSP页面使用<s:fielderror/>标签元素来显示类型转换异常信息。
2、改进类型转换异常显示信息
Struts2框架提供了对指定Action属性指定自定义的显示信息,这里需要用到Action局部资源文件,Action局部资源文件名称为:ActionName.properties。需要在该文件中加入异常处理内容。例如:
invalid.fieldvalue.birthday=您输入了一个非法的日期字符串
invalid.fieldvalue.book.price=价格必须输入一个浮点数值
其中,invalid.fieldvalue是固定不变的,birthday为相应的Action中的属性名称。
注意:如果Action中定义了集合类型属性,需要在Action局部资源文件中加入如下形式的代码:
invalid.fieldvalue.book[*].price=价格必须输入一个浮点数值