struts2自定义转换器

时间:2023-01-06 18:53:08

Struts2自定义类型转换器分为局部类型转换器和全局类型转换器

(1)局部类型转换器 
如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用。

以下为局部类型转换器的开发步骤

a.首先要写一个类来继承StrutsTypeConverter

b.然后覆盖convertFromString(),convertToString()这个方法,在里面进行数据转型

c.在action类所在的包下放置ConversionAction-conversion.properties文件,ConversionAction是类名,后面的-conversion.properties是固定的写法, 
如:ConversionAction-conversion.properties

d.Properties文件里面的内容为:属性名称=类型转换器的全类名(既包名.类名)

如:date=cn.happy.conversion.DateConversion

创建ConversionAction类

public class ConversionAction extends ActionSupport {
private Date date; @Override
public String execute() throws Exception {
return SUCCESS;
} public Date getDate() {
return date;
} public void setDate(Date date) {
this.date = date;
}

编写自定义转换器代码

public class DateConversion extends StrutsTypeConverter {
private static final List<SimpleDateFormat> list=new ArrayList<SimpleDateFormat>();
static {
list.add(new SimpleDateFormat("yyyy-MM-dd"));
list.add(new SimpleDateFormat("yyyy年MM月dd日"));
list.add(new SimpleDateFormat("yyyy/MM/dd"));
list.add(new SimpleDateFormat("yyyy.MM.dd"));
}
public Object convertFromString(Map map, String[] strings, Class aClass) {
//获取日期的字符串
String date=strings[];
for(SimpleDateFormat item:list){
try {
//把String类型转为Date
Date parse = item.parse(date);
return parse;
} catch (ParseException e) {
continue;
}
}
//如果遍历完毕后扔没有转换成功,表明出现转换异常
throw new TypeConversionException();
} public String convertToString(Map map, Object obj) {
Date date=(Date)obj;
//输出格式
return new SimpleDateFormat("yyyy-MM-dd").format(date);
}
}

jsp页面代码

 <form action="conversion" method="post">
日期<input name="date">
<input type="submit" value="提交">
</form>

struts.xml配置

 <action name="conversion" class="cn.happy.action.ConversionAction" >
<!--转换失败,进入login.jsp页面-->
<result name="input">login.jsp</result>
<result name="success">sucess.jsp</result>
</action>

(2)全局类型转换器 
如果业务需求所有的日期都要转换,则可以使用全局类型转换器,只要在src根目录下面放置xwork-conversion.properties文件,并且properties文件中的内容为: 
待转换的类型=类型转换器的全类名

java.util.Date=cn.happy.conversion.DateConversion

struts2自定义转换器