首页 > 代码库 > struts2自定义类型转换器
struts2自定义类型转换器
一、类型转换器定义:
众所周知,java有八大基本的类型,struts2能对这八大基本类型以及String、Date等常用类型提供自动转换。
但是,仅仅这些远远不能满足我们的需要。
原因:因为页面中的类型都是属于字符串类型的,而java是一种强类型语言,这时候我们需要把输入的字符串转型成为相应的类型。
在类型转换器的定义中也分为两种:
局部类型转换器:对某个action转换类型起作用。
全局类型转换器:对所有action转换类型起作用。
二、局部类型转换器:
这里用一个日期来举例子:
比如我们在页面输入20140828,如果Action类的属性是Date类型的,则它不能够正确接收到这个时间值。
如果我们输入2014-08-28,则Action类的Date类型的属性就可以正确接收到这个时间值。
所以,这个时候我们就需要用到类型转换了。
首先我们需要定义一个简单的Action类继承ActionSupport类:
package cn.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport{ private Date birthday; public Date getBirthday() { System.out.println("get:"+birthday); return birthday; } public void setBirthday(Date birthday) { System.out.println("set:"+birthday); this.birthday = birthday; } public String excute(){ return SUCCESS; } }
package cn.type.Converter; import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Map; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class DateTypeConverter extends DefaultTypeConverter { @Override public Object convertValue(Map arg0, Object value,Class toType) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); try { if (toType == Date.class) {// 当字符串向Date类型转换时 String[] params = (String[]) value;// Request.getParameterValues() System.out.println("value=http://www.mamicode.com/"+value);>最后,我们需要把这个类型转换器注册到WEB应用上边:
在需要生效的Action类的包下新建ActionName-conversion.properties该文件,其中 ActionName是需要转换生效的Action的类名,后面的-conversion固定。
内容: 待转换的action中的属性名=类型转换器的全类名。 注意:类型转换器是需要加包名,而且最后不能加标点符号
com.DateTypeConvert 如:date= 我们这里需要建立的是:HelloWorldAction-conversion.properties
birthday=cn.type.Converter.DateTypeConverter
这是项目的工程目录:
请忽视LoginAction.java这个文件,这个文件不是本次实验中的。
三、全局类型转换器:
局部类型转换器仅仅对指定的Action的指定属性进行转换。
全局类型转换器对所有Action的特定类型进行转换。
在src目录下新建xwork-conversion.properties,该文件的内容是待转换的类=转换器的名字,即com.shengsiyuan.bean.User=com.shengsiyuan.converter.UserConverter2
struts2自定义类型转换器