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的自定义转换器。