Struts2 自定義日期型別轉換
阿新 • • 發佈:2019-02-12
xwork-conversion.properties檔案,程式自動載入web.xml,根據web.xml中的配置,自動找到struts.xml檔案,此時如果struts.xml同級目錄存在xwork-conversion.properties檔案,程式就會自動載入該檔案。
xwork-conversion.properties它是一個格式轉換器。
例:
xwork-conversion.properties檔案中配置:
java.util.Date=com.xxx.DateConverter
DateConvert.java:
package com.xxx; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.log4j.Logger; import org.apache.struts2.util.StrutsTypeConverter; public class DateConverter extends StrutsTypeConverter { private static final Logger log = Logger.getLogger(DateConverter.class); public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; public static final DateFormat[] ACCEPT_DATE_FORMATS = { new SimpleDateFormat(DEFAULT_DATE_FORMAT), new SimpleDateFormat("yyyy年MM月dd日"), new SimpleDateFormat("yyyy/MM/dd") }; public DateConverter() { } @Override public Object convertFromString(Map context, String[] values, Class toClass) { if (values[0] == null || values[0].trim().equals("")) return null; for (DateFormat format : ACCEPT_DATE_FORMATS) { try { return format.parse(values[0]); } catch (ParseException e) { continue; } catch (RuntimeException e) { continue; } } log.debug("can not format date string:" + values[0]); return null; } @Override public String convertToString(Map context, Object o) { if (o instanceof Date) { SimpleDateFormat format = new SimpleDateFormat( DEFAULT_DATE_FORMAT); try { return format.format((Date) o); } catch (RuntimeException e) { return ""; } } return ""; } }
JSP頁面使用Struts標籤時,如果屬性的型別為日期,會自動轉換成字串顯示,不用再使用s:date標籤了。
例:
<s:textfield id="bean.model.changeDate" name="bean.model.changeDate"></s:textfield>
其中,changeDate為日期格式,此時輸出的結果應該是:
<input type="text" name="bean.model.changeDate" value="2017-07-11" id="bean.model.changeDate"/>