读书人

struts2日期在中文环境下提交正确在

发布时间: 2012-11-09 10:18:47 作者: rapoo

struts2日期在中文环境上提交正确,在英文环境上提交报错
最近开发s2sh项目,在本机测试好了,放到服务器上,保存订单的时候日期出错了,报日期类型转换错误,最后查找资料发现:由于Struts2匹配日期时,使用了Locale,服务器默认的语言环境是英语,就会出现日期类型转换异常,如果把中文设置为默认语言环境,再测试,没问题了。终于知道了原因。
写一个日期类型转换器就行了!
页面日期类型:

开始日期:<s:datetimepicker name="product.startDate"   displayFormat="yyyy-MM-dd"  />

转换器如下:
package cn.anycall.conversion;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Map;import ognl.DefaultTypeConverter;import org.apache.commons.lang.StringUtils;import org.apache.commons.lang.time.DateUtils;import org.apache.log4j.Logger;public class DateConverter extends DefaultTypeConverter {    private static final Logger logger = Logger.getLogger(DateConverter.class);    private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";    private static final String DATE_PATTERN = "yyyy-MM-dd";        private static final String MONTH_PATTERN = "yyyy-MM";    /**     * Convert value between types     */    @SuppressWarnings("unchecked")    public Object convertValue(Map ognlContext, Object value, Class toType) {            Object result = null;            if (toType == Date.class) {                    try {result = doConvertToDate(value);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}            } else if (toType == String.class) {                    result = doConvertToString(value);            }            return result;    }    /**     * Convert String to Date     *     * @param value     * @return     * @throws ParseException      */    private Date doConvertToDate(Object value) throws ParseException {            Date result = null;            if (value instanceof String) {                    result = DateUtils.parseDate((String) value, new String[] { DATE_PATTERN, DATETIME_PATTERN, MONTH_PATTERN });                    // all patterns failed, try a milliseconds constructor                    if (result == null && StringUtils.isNotEmpty((String)value)) {                            try {                                    result = new Date(new Long((String) value).longValue());                            } catch (Exception e) {                                    logger.error("Converting from milliseconds to Date fails!");                                    e.printStackTrace();                            }                    }            } else if (value instanceof Object[]) {                    // let's try to convert the first element only                    Object[] array = (Object[]) value;                    if ((array != null) && (array.length >= 1)) {                            value = array[0];                            result = doConvertToDate(value);                    }            } else if (Date.class.isAssignableFrom(value.getClass())) {                    result = (Date) value;            }            return result;    }    /**     * Convert Date to String     *     * @param value     * @return     */    private String doConvertToString(Object value) {            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATETIME_PATTERN);            String result = null;            if (value instanceof Date) {                    result = simpleDateFormat.format(value);            }            return result;    }}


可以将该转换器注册为全局的:在classpath下建立xwork-conversion.properties文件,内容为:java.util.Date=cn.anycall.conversion.DateConverter

读书人网 >软件架构设计

热点推荐