当前位置: 首页 > 知识库问答 >
问题:

如何使用@datetimeformat绑定spring表单中的日期字段?

汪德寿
2023-03-14

我正在寻找解决我当前问题的方法。我有一个经典的POJO由Hibernate用date变量映射。

@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;
    }
}

此实体以时间戳变量(2013-09-25 22:13:18.000)保存在MySQL数据库中。

我正在使用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>

编辑:我已经有@initbinder了,但它只在通过窗体创建新对象时起作用,因此它将String强制转换为Date。但是当我想用DB中的现有数据填充表单输入时,它就不起作用了。

@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 time的Spring3.1.1.Release,只是普通的java.util.date。

dispatcher-servlet.xml中的 设置正确。当我使用调试器时,我可以看到,在从表单输入值创建新对象时,使用了CustomDateEditorsetastext(String text)方法。我希望第二个方法String getAsText()将用于在填写表单输入时将数据格式化为String。但是,它不是!

共有1个答案

薛弘济
2023-03-14

@datetimeformat(pattern=“dd.mm.yyyy hh:mm”)注释基本上是说,当您在特定模式中获得字符串时,将其转换为

java.util.datejava.util.calendarjava.long.long或Joda时间字段。

在您的示例中,它是java.util.date

当你做一些像

<spring:message code="administration.record.created"/>:</form:label>

您只需对创建的日期对象调用ToString()。在ToString()中返回字符串时,Date类在内部使用自己的格式,这就是您看到的。

考虑使用JSTL中的fmt:formatdate标记。

 类似资料:
  • 我想将spring date字段绑定到pojo类并返回日期 DateOfBornd的类型为java.sql.Date。现在,当我将日期从spring形式传递给函数setDateOfBorning时,它取空值 例如,在register.jsp(注册表单)中,我有specific字段 java(Pojo类) 当我调用getDateOfBorne()时 返回: 预期的 我得到的信息: 请帮助我如何转换这

  • 问题内容: 对于表示字符串,数字和布尔值的请求参数,Spring MVC容器可以立即将它们绑定到键入的属性。 Spring MVC容器如何绑定代表日期的请求参数? 说到哪一个,Spring MVC如何确定给定请求参数的类型? 谢谢! 问题答案: Spring MVC如何确定给定请求参数的类型? Spring利用ServletRequestDataBinder绑定其值。该过程可以描述如下 … 在后台

  • DTO 如果是直接的,则返回一个异常:

  • 我有一些这样的疑问: 这会将此 SQL 查询发送到数据库: 现在我想将这种类型的查询发送到数据库: 我需要传递列表吗?

  • 我试图使用标签库绑定 POJO。绑定引用类 bean 变量后,我收到“错误请求错误 - http 状态 400”。 如果我删除引用类的绑定,则我的表单将成功提交,并且值也会填充在类中。 和 JSP: 我从几篇文章中获得了引用,但是当我在提交JSP之前添加行时,他们正在获取请求加载引用bean列表。

  • 我有一个使用Spring MVC的应用程序,它与REST服务交互。UI有一个典型的使用JSP的表单输入。 并且在UI上绑定到一个输入: 因此,在我的控制器中,当我发布表单并在输入框中输入适当的“yyyy-mm-dd”字符串时,字段为null并出现绑定错误。Controller方法如下所示 如果我查看BindingResult,我会看到一个错误,如下所示: 如果我用@datetimeformat(p