Использование времени 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}"/>
Другие вопросы по тегам