我正在寻找解决我当前问题的方法。我有一个由 Hibernate 映射的带有Date
变量的经典 POJO。
@Entity
@Table(name="record")
public class Record implements Serializable {
@Column(name = Record.COLUMN_CREATED)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@DateTimeFormat(pattern="dd.MM.yyyy hh:mm")
private Date created;
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
}
该实体保存在 MySQL 数据库中的 TIMESTAMP 变量 (2013-09-25 22:13:18.000) 中。
我正在使用 Spring 表单来显示保存在我的 POJO 中的数据。
<form:form method="post" commandName="record" action="record/update.htm">
<table>
<tr>
<td><form:label path="<%=Record.COLUMN_CREATED%>"><spring:message code="administration.record.created"/>:</form:label></td>
<td><form:input path="<%=Record.COLUMN_CREATED%>"/></td>
</tr>
</table>
</form:form>
我的问题是,当我想编辑这个 POJO 并将其发送到 spring 表单中显示时,我得到的日期为 2013-09-25 22:13:18.000,与 MySQL 时间戳的格式完全相同。但是我想根据我使用@DateTimeFormat 注释设置的模式来格式化这个日期。
有人可以告诉我,我做错了什么吗?非常感谢,Ondrej。
编辑:我已经@InitBinder
有了,但它仅在我通过表单创建新对象时才有效,因此它String
转换为Date
. 但是当我想用数据库中的现有数据填充表单输入时,它不起作用。
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy h:mm");
sdf.setLenient(true);
binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
我正在使用没有 Joda 时间的 Spring 3.1.1.RELEASE,只是普通的 java.util.Date。
<mvc:annotation-driven/>
在 dispatcher-servlet.xml 中设置正确。当我使用调试器时,我可以看到,在从表单输入值创建新对象时,使用了一种setAsText(String text)
方法CustomDateEditor
。我希望第二种方法String getAsText()
将用于在填写表单输入时将数据格式化为字符串。但是,它没有!