Struts2自定义日期转换器


1.  日期格式转换器

自定义日期格式转换器,可以动态调整日期格式,并更新到数据库。

/**
 * 保存日期格式的基础类。
 *
 * @author daichen
 *
 */
public class DateConverter extends StrutsTypeConverter {
 
    /**
    * 内存中的日期格式
    */
    private String format;
 
    /**
    * 可以从数据库中加载日期格式
    */
    @PostConstruct
    public void loadFormat() {
    format = "yyyy-MM-dd";
    }
 
    @SuppressWarnings("rawtypes")
    @Override
    public Object convertFromString(Map context,String[] values, Class toClass) {
    // Pre-validate
        if (ArrayUtils.isEmpty(values) ||StringUtils.isEmpty(values[0])) { 
            return null; 
        }
     
        Date date = null;
        try {
            date = new SimpleDateFormat(format).parse(values[0]);   
        } catch (ParseException e) {   
            date = null;   
        }
        return date;
    }
 
    @SuppressWarnings("rawtypes")
    @Override   
    public String convertToString(Map context, Objecto) {
        if (o instanceof Date) { 
            return new SimpleDateFormat(format).format((Date) o); 
        }
        return StringUtils.EMPTY; 
}
 
/**
    * 更改日期格式(可以同时更新到数据库)
    * @param format
    */
    public void changeFormat(String format) {
        this.format = format;
    }
}

2.  全局配置文件

新建xwork-conversion.properties,并与struts.xml放在一起。此配置文件中定义的转换器是全局的,也可以定义一个指定Action的转换器。

java.util.Date=com.cdai.ssh.common.DateConverter

3.  JSP页面

<%@page
    import="com.cdai.ssh.user.vo.*"
    contentType="text/html;charset=utf-8"
%>
<%@taglib prefix="s"uri="/struts-tags"%>
 
<html>
 
    <head>
        <title>Programmer inSY</title>
    </head>
 
    <body>
 
        <s:iterator value="userList">
            <li>
                <s:property value="createdTime"/>             
            </li>
            <p>
                <s:property value="id"/>
            </p>
        </s:iterator>
 
    </body>
 
</html>

4.  未解决问题

4.1 配置文件位置

struts.xml和xwork-conversion.properties要放在一起,但是不放在classes根位置就会报错。

4.2 兼容Velocity

Velocity不支持Struts2的自定义转换器。

相关内容