在JSP中使用Java8时间

时间:2016-06-12 17:44:50

标签: jsp struts2 el java-time valuestack

对于我的开源项目,我正在将日期字段从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表单。

看看这篇文章:JSTL LocalDateTime format,似乎我可以使用两种选择,Sargue的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功能选项来完成,那对我也有用。)

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

与罗马的上述解决方案一起提取${myBean.timeField}

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

顺便说一下,从Struts迭代器标记中检索日期变量:

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

可以使用Struts set标签替换它:

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