struts2类型转化器详解(带例子)
Struts2有两种类型转化器:
一种局部,一种全局.
如何实现:
第一步:定义转化器
第二部:注册转化器
下面做一个局部类型转化器的实例。
我们在上面一片日志说过有个变量date类型的。只有我们输入格式为yyyy-MM-dd的日期类型才会有效。否则则无效。那么我就需要一个类型转化当输入为yyyy-MM-dd的日期类型也能有效,该怎么做?
这时候我们需要一个自定义的类型转化器。
首先我们定义一个类型转化器
我们的类为:DateTypeChange.java
package com.fish;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;
publicclass DateTypeChange extends DefaultTypeConverter{//首先得继承默认转化器类
@Override
public Object convertValue(Map<String, Object> context, Object value,
Class toType) {//第二个参数是你的要转化的数据就是我们下面test.Java的brithday属性的值,第三个参数是你传进来的数的值
SimpleDateFormat format=new SimpleDateFormat("yyyyMMdd");//创建一个日期类型的排版格式。
try {
if(toType==Date.class){
String[] parm=(String[])value;
return format.parse(parm[0]);
}elseif(toType==String.class){
Date date=(Date)value;
return format.format(date);
}
} catch (Exception e) {
}
returnnull;
}
}
类型转化器书写完毕,接着应该写一个注册文件关联类型转化器和你想转化属性的那个类(这个文件写在转化器的同一个包下)
书写格式:“要转化的属性的类型(不加包名)”+conversion.properties。
文件里面写:brithday=com.fish.DateTypeChange
顺便把其他几个test.Java也写上:
package com.fish;
import java.util.Date;
publicclass Test {
private String name;
private String id;
private Date brithday;
public Date getBrithday() {
returnbrithday;
}
publicvoid setBrithday(Date brithday) {
this.brithday = brithday;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
public String getId() {
returnid;
}
publicvoid setId(String id) {
this.id = id;
}
public String execute(){
return"success";
}
}
接着:Struts2.xml:
<package name="fish" namespace="/test" extends="struts-default">
<action name="redfish" class="com.fish.Test" method="execute">
<param name="name">xxxx</param>
<result name="success">/index.jsp</result>
</action>
然后:MyJsp.JSP
<form action="/struts2test4/test/redfish.action">
<input type="text" name="username">
<input type="text" name="id">
<input type="text" name="brithday">
<input type="submit" value="确定">
最后:index.JSP
name=${name}<br>
id= ${id} <br>
brithday=${brithday}<br>
这时我们在index.JSP页面中输入yyyyMMdd类型的日期类型时,struts2也能转化成日期格式处理了。
当然如果你想写全局转化器。
只要改properties文件:
将他移动到web-inf/classess下,命名是
xwrok-conversion.properties
在里面的内容:
转化的类型(有包名的)=转化器(包名的)
所以是这么写
Java.util.Date=com.fish.DateTypeChange
意思是说对于所有date类型我都可以转化为这种格式处理。