4

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

在 JSP 中,我使用 Struts 标记来格式化java.util.Date传入的 bean,但是,这些标记不适用于 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 函数选项来完成,那也对我有用。)

4

2 回答 2

1

您可以在value属性中使用 EL。Struts2 包装了一个从valueStack. 这是从 EL 对您的操作变量的本机访问。

<javatime:parseLocalDateTime value="${myBean.timeField}" pattern="generic.date.toStringFormat" var="parsedDate" />
于 2016-06-12T18:34:22.573 回答
1

要添加到 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 的 set 标记来替换:

<s:set var="tempTime" value="#comment.postTime"/>
<javatime:format value="${tempTime}" pattern="${dateFormat}"/>
于 2016-06-13T00:02:21.170 回答