- Struts 2.x权威指南
- 李刚编著
- 891字
- 2022-07-20 11:11:57
4.2 Struts2内建的类型转换器
前面已经提到,对于 Web 应用而言,类型转换如此频繁,几乎所有的 MVC 框架都会提供内建的类型转换器,对于大部分的常用类型,开发者根本无须创建自己的类型转换器,因为Struts 2可以完成大多数常用的类型转换。
这些常用的类型转换都是通过Struts 2内建的类型转换器完成的,Struts 2已经内建了字符串类型和如下类型之间的类型转换器。
boolean和Boolean:完成字符串和布尔值之间的转换。
char和Character:完成字符串和字符之间的转换。
int和Integer:完成字符串和整型值之间的转换。
long和Long:完成字符串和长整型值之间的转换。
float和Float:完成字符串和单精度浮点值之间的转换。
double和Double:完成字符串和双精度浮点值之间的转换。
Date:完成字符串和日期类型之间的转换,日期格式使用用户请求所在 Locale 的SHORT格式。
数组:在默认情况下,数组元素是字符串,如果用户提供了自定义类型转换器,也可以是其他复合类型的数组。
集合:在默认情况下,假定集合元素类型为String,并创建一个新的ArrayList封装所有的字符串。
注意
对于数组的类型转换,将按照数组元素的类型来单独转换每一个元素;但对于其他的类型转换,如果转换无法完成,系统将出现类型转换错误。
对于上一个应用的注册页面,如果使用Struts 2来处理该注册请求,程序员将无须自己进行类型转换,直接使用Struts 2内建的类型转换器即可。下面是处理该注册请求的Action代码。
程序清单:codes\04\4.2\simpleConvert\WEB-INF\src\org\crazyit\struts2\action\RegistAction.java
public class RegistAction extends ActionSupport { // 值对象用于封装请求参数的4个属性 private String name; private String pass; private int age; private Date birth; // 无参数的构造器 public RegistAction() { } // 初始化全部属性的构造器 public RegistAction(String name , String pass , int age , Date birth) { this.name = name; this.pass = pass; this.age = age; this.birth = birth; } // 省略各属性的setter与getter方法 ... }
正如上面Action中的粗体字代码所示,该Action内包含age、birth属性,它们的数据类型分别是int和Date,所有请求参数的数据类型都是String类型,因此需要进行类型转换处理,但无须程序员操心,Struts 2框架会处理这一切——直接将该Action配置在struts.xml文件中,将注册请求提交给该Action处理即可。在struts.xml文件中配置该Action的代码片段如下。
程序清单:codes\04\4.2\simpleConvert\WEB-INF\src\struts.xml
<!-- 下面配置本系统的Action --> <action name="regist" class="org.crazyit.struts2.action.RegistAction"> <!-- 下面定义了一个结果映射 --> <result>/WEB-INF/content/welcome.jsp</result> </action>
该Action处理注册请求后将直接转入welcome.jsp页面,转入welcome.jsp页面将看到如图4.4所示的结果:类型转换成功。
图4.4 Struts 2内建类型转换成功
注意
上面的 RegistAction 并未重写 execute()方法,这是由于该 Action 继承了ActionSupport类,ActionSupport类已经重写了execute()方法——该方法总是返回success字符串。