在 JSP 中使用 Java8 时间

Using Java8 time in JSPs

对于我的开源项目,我正在将日期字段从 java.util.Date 切换到 Java 8 的 java.time.LocalDateTime

在 JSP 中,我使用 Struts 标签从传入的 bean 中格式化 java.util.Date,但是,这些不适用于 Java 8次。我使用 Struts 标签不仅检索时间字段,还检索用于解析它的格式化字符串:

<s:text name="generic.date.toStringFormat">
    <s:param value="myBean.timeField" />
</s:text>

"generic.date.toStringFormat" 在消息资源文件中,myBean.timeField 来自支持 JSP.

的 Action 表单

查看此 post:, it seems there are two alternatives I can use, Sargue's https://github.com/sargue/java-time-jsptags 或自定义 EL 函数,例如前者:

<javatime:format value="myBean.timeField" pattern="generic.date.toStringFormat"/>

问题是,"myBean.timeField""generic.date.toStringFormat" 似乎只能在 Struts 标签内解析。如果 <javatime> 是标准的 HTML 标签,我可以使用 <s:property/> 来解析值,例如

<span><s:property value="myBean.timeField"/></span>

但是 <javatime:.../> 是一个 JSP 标签,我似乎无法在其他 JSP 标签中解析 Struts JSP 标签。问题:如何将 bean 值 myBean.timeField 和消息资源值 generic.date.toStringFormat 提取到变量中,以便我可以在上面的 <javatime/> 标记中引用它们? (如果这可以通过自定义 EL 函数选项来完成,那对我也适用。)

您可以在 value 属性中使用 EL。 Struts2 包装了从 valueStack 搜索属性的请求。这是从 EL 本地访问您的操作变量。

<javatime:parseLocalDateTime value="${myBean.timeField}" pattern="generic.date.toStringFormat" var="parsedDate" />

要添加到 Roman 的回答中的更多信息:要从资源文件中获取模式,请添加 JSTL fmt 标记并将其放入变量中:

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<fmt:message key="generic.date.toStringFormat" var="dateFormat"/>

结合上面Roman的解法提取${myBean.timeField}:

<javatime:format value="${myBean.timeField}" pattern="${dateFormat}" />

顺便说一句,对于从 Struts 迭代器标记检索的日期变量:

<s:date name="#iter.myDateField"/>

这可以使用 Struts 设置标签替换:

<s:set var="tempTime" value="#comment.postTime"/>
<javatime:format value="${tempTime}" pattern="${dateFormat}"/>