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