Spring MVC:如何在 JSP EL 中显示格式化的日期值

2022-09-02 21:50:07

下面是一个简单的值 bean,用 Spring 的新(截至 3.0)便利性注释进行注释(据我所知,它取代了 3.0 之前对自定义 s 的需求,因为这个 SO 问题):@DateTimeFormatPropertyEditor

import java.time.LocalDate;
import org.springframework.format.annotation.DateTimeFormat;

public class Widget {
  private String name;

  @DateTimeFormat(pattern = "MM/dd/yyyy")
  private LocalDate created;

  // getters/setters excluded
}

将表单提交到此小部件的值出价时,日期格式可以完美地工作。也就是说,只有格式中的日期字符串才能成功转换为实际对象。太好了,我们已经完成了一半。MM/dd/yyyyLocalDate

但是,我也希望能够使用JSP EL以相同的格式在JSP视图中显示创建的属性,如下所示(假设我的弹簧控制器向模型添加了一个小部件属性):LocalDateMM/dd/yyyy

${widget.created}

不幸的是,这只会显示默认格式(格式)。我明白,如果我使用spring的表单标签,日期会根据需要显示:toStringLocalDateyyyy-MM-dd

<form:form commandName="widget">
  Widget created: <form:input path="created"/>
</form:form>

但我想简单地显示格式化的日期字符串,而不使用弹簧表单标签。甚至是JSTL的标签。fmt:formatDate

来自Struts2,它被包装在一个StrutsRequestWrapper中,这使得像这样的EL表达式能够实际询问OGNL值堆栈。所以我想知道弹簧是否提供了类似的东西来允许转换器执行?HttpServletRequest

编辑

我还意识到,当使用spring的标签时,日期将根据注释中定义的模式显示:eval@DateTimeFormat

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<spring:eval expression="widget.created"/>

有趣的是,当使用自定义来设置日期的格式时,此标记不会调用 该方法,因此默认为文档中所述的方法。无论如何,我仍然想知道是否有一种方法可以实现日期格式化而不必使用标记 - 仅使用标准JSP EL。PropertyEditorPropertyEditorgetAsTextDateFormat.SHORT


答案 1

您可以使用标记为您提供这些格式,例如金钱,数据,时间等。

您可以在 JSP 上添加引用:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

并将格式设置为:<fmt:formatDate pattern="yyyy-MM-dd" value="${now}" />

以下是一个参考:

http://www.tutorialspoint.com/jsp/jstl_format_formatdate_tag.htm


答案 2

为了精确的爱德华多回答:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<fmt:formatDate pattern="MM/dd/yyyy" value="${widget.created}" />