java.util.Date的set方法問題(struts2類型轉換)

來源:互聯網
上載者:User

java.util.Date的set方法與struts2類型轉換,關係似乎不大,但某些情況下,java.util.Date需要轉換才能被set,特別是在struts2使用下。

情況是這樣的,項目進入測試階段,一個bug讓我們很頭疼。頁面上my97日期外掛程式選擇的日期,在MAC系統中FF下,傳到後台無法被set(其他系統其他瀏覽器正常。。。)。研究時發現,伺服器報的異常是找不到該屬性的setBirthday([Ljava.Lang.String birthday),但實際上,birthday定義的是java.util.Date。

/** * 生日 */private java.util.Date birthday;public java.util.Date getBirthday() {return birthday;}public void setBirthday(java.util.Date birthday) {this.birthday = birthday;}

無奈之下,就寫了一個Stirng類型的set方法

public void setBirthday(String birthday) {Date date = null;if(!StringUtils.isEmpty(birthday)){try {date = DateUtil.convertStringToDate(birthday);} catch (ParseException e) {e.printStackTrace();}}this.birthday = d1;}

如此,MAC機FF訪問windows開發機,正常。問題在後面,待部署到測試機(linux),又說找不到setBirthday(String)。。。不可思議之下,將setBirthday(String)提到setBirthday(java.util.Date)之前,正常。

這個bug算是修複了,但總覺得怪異。後面和同事聊起,說可能是struts2的資料轉換問題,單獨加上資料轉換(拿掉setBirthday(String)),確實正常,索性就把兩種解決方案都加上。

#DateConverterjava.util.Date=org.abc.commons.util.DateTypeConverter

xwork-conversion.properties,放於src目錄下。

public class DateTypeConverter extends DefaultTypeConverter {@Overridepublic Object convertValue(Map context, Object value, Class toType) {SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");if (toType == Date.class) { // 瀏覽器向伺服器提交時,進行String to Date的轉換Date date=null;String dateString = null;String[] params = (String[]) value;dateString = params[0];// 擷取日期的字串        try {date=simpleDateFormat.parse(dateString);// 遍曆日期支援格式,進行轉換return date;} catch (Exception e) {}return null;}else if (toType == String.class) { // 伺服器向瀏覽器輸出時,進行Date to String的類型轉換Date date = (Date) value;return new SimpleDateFormat("yyyy-MM-dd").format(date);// 輸出的格式是yyyy-MM-dd}return null;}}

此處也可以看到,struts2是以數組接受參數的,上面的([Ljava.Lang.String birthday)也就不難理解。

struts2資料轉換器可參見:http://www.cnblogs.com/lpshou/archive/2012/11/27/2791188.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.