Использование времени Java8 в JSP
Для моего проекта с открытым исходным кодом я в процессе переключения полей даты с java.util.Date
в Java 8 java.time.LocalDateTime
,
В JSP я использую теги Struts для форматирования java.util.Date
однако из переданного компонента они не будут работать с Java 8 раз. Я использую тег Struts не только для извлечения поля времени, но и для строки форматирования, которая будет использоваться для его анализа:
<s:text name="generic.date.toStringFormat">
<s:param value="myBean.timeField" />
</s:text>
"generic.date.toStringFormat"
находится в файле ресурсов сообщения, а myBean.timeField - из формы Action, поддерживающей JSP.
Глядя на этот пост: формат JSTL LocalDateTime, кажется, есть две альтернативы, которые я могу использовать: https://github.com/sargue/java-time-jsptags Sargue или пользовательская 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. Вопрос: Как я могу извлечь значение бина myBean.timeField
и значение ресурса сообщения generic.date.toStringFormat
в переменные, чтобы я мог ссылаться на них в <javatime/>
тег выше? (Если это можно сделать с помощью пользовательской опции EL, это также будет работать для меня.)
2 ответа
Вы можете использовать EL в value
приписывать. Struts2 обернул запрос на поиск атрибутов из valueStack
, Это нативный доступ к вашим переменным действия из EL.
<javatime:parseLocalDateTime value="${myBean.timeField}" pattern="generic.date.toStringFormat" var="parsedDate" />
Дополнительная информация для добавления к ответу Романа. Чтобы получить шаблон из файла ресурсов, добавьте тег 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:
<s:set var="tempTime" value="#comment.postTime"/>
<javatime:format value="${tempTime}" pattern="${dateFormat}"/>