在JSP中使用Java8时间
对于我的开源项目,我正在将日期字段从在JSP中使用Java8时间,jsp,struts2,el,java-time,valuestack,Jsp,Struts2,El,Java Time,Valuestack,对于我的开源项目,我正在将日期字段从java.util.date切换到Java8的java.time.LocalDateTime 在JSP中,我使用Struts标记来格式化传入bean中的java.util.Date,但是,这些标记不适用于Java8时间。我使用Struts标记不仅检索时间字段,还检索用于解析时间字段的格式字符串: “generic.date.toStringFormat”位于消息资源文件中,myBean.timeField来自支持JSP的操作表单 看看这篇文章:,我似乎可以
java.util.date
切换到Java8的java.time.LocalDateTime
在JSP中,我使用Struts标记来格式化传入bean中的java.util.Date
,但是,这些标记不适用于Java8时间。我使用Struts标记不仅检索时间字段,还检索用于解析时间字段的格式字符串:
“generic.date.toStringFormat”
位于消息资源文件中,myBean.timeField来自支持JSP的操作表单
看看这篇文章:,我似乎可以使用两种选择,Sargue或定制EL函数,例如前者:
问题是,“myBean.timeField”
和“generic.date.toString格式”
似乎只能在Struts标记中解决。如果
是标准的HTML标记,我可以使用
来解析值,例如
但是
是一个JSP标记,我似乎无法在其他JSP标记中解析Struts JSP标记。问题:如何将bean值myBean.timeField
和消息资源值generic.date.toString格式
提取到变量中,以便在上面的
标记中引用它们?(如果这可以通过自定义EL功能选项来实现,这也适用于我。)您可以在值
属性中使用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"/>
另外,对于从Struts迭代器标记检索的日期变量:
<s:date name="#iter.myDateField"/>
这可以通过使用Struts set标记来替换:
<s:set var="tempTime" value="#comment.postTime"/>
<javatime:format value="${tempTime}" pattern="${dateFormat}"/>
${myBean.timeField}工作得很好,thx,模式部分(有或没有${})仍然失败,不过,我要看看是否可以使用JSTL fmt标记将资源值提取到变量中,这样我就可以在jt:pLDT标记中执行类似pattern={$patternVar}的操作。
<s:set var="tempTime" value="#comment.postTime"/>
<javatime:format value="${tempTime}" pattern="${dateFormat}"/>