对于我的开源项目,我正在将日期字段从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功能选项来完成,那对我也有用。)
答案 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}"/>