在java web表單中提交的數據難免會有日期類型,struts2支持的日期類型是yyyy-MM-dd,如果是其他格式,就需要自己進行轉換。比如yy-MM-dd
要完成自己定義的轉換需要完成。
主要的類是:StrutsTypeConverter,該類是抽象類,需要實現兩個方法
1)public Object convertFromString(Map context, String[] values, Class toClass)
2)public String convertToString(Map context, Object o)
其中第二個轉換成字符串的不常用。
步驟:
1 定義轉換器類
2 進行配置,局部或全局
1、定義轉換器類
定義一個 DateConverter 類繼承自 StrutsTypeConverter,實現兩個虛方法
@Override public Object convertFromString(Map context, String[] values, Class toClass) { SimpleDateFormat[] sdfs = { new SimpleDateFormat("yyyyMMdd"), new SimpleDateFormat("yyyy/MM/dd"), new SimpleDateFormat("yyyy,MM,dd")}; //轉換類型不是日期類型 if(toClass != Date.class){ return null; } //轉換值是空或者長度為0 if(values == null || values.length==0){ return null; } String strDate = values[0]; Date birthday = null; for(int i=0;i<sdfs.length; i++){ try { birthday = sdfs[i].parse(strDate); return birthday; } catch (ParseException e) { continue; } } return birthday; } @Override public String convertToString(Map context, Object o) { // TODO Auto-generated method stub return null; }
2 配置,分兩種。一種是局部配置,另一種是全局配置
2.1)應用於特定Action類的類型轉換器 在特定Action類的同一目錄下創建一個名為ActionClassName-conversion.properties的屬性文件
例如:我的Action類是public class AdminAction extends ActionSupport,對該類轉換的屬性文件名是:AdminAction-conversion.properties
配置格式:屬性.屬性 = 轉換器類全名
例如:
Admin類
public class Admin { private String aname; private String apasswd; private Date abirthday; public Admin() { // TODO Auto-generated constructor stub } public String getAname() { return aname; } 。。。。。
AdminAction類
public class AdminAction extends ActionSupport { private Admin admin; public Admin getAdmin() { return admin; } public void setAdmin(Admin admin) { this.admin = admin; } public String login(){ 。。。
表單頁面
配置內容:admin.abirthday=com.baidu.converter.DateConverter
2.2) 全局配置:在src目錄下創建xwork-conversion.properties
配置格式:類型全名=轉換器類全名
上面例子就是:java.util.Date=com.baidu.converter.DateConverter