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類型我都可以轉化為這種格式處理。