在 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}"/>
对于我的开源项目,我正在将日期字段从 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.
查看此 post:
<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}"/>