Здесь простое значение bean, аннотированное с помощью Spring новой (начиная с версии 3.0) удобной @DateTimeFormat аннотации (которая, как я понимаю, заменяет потребность в pre-3.0 для пользовательских PropertyEditor по этот вопрос SO):
import java.time.LocalDate;
import org.springframework.format.annotation.DateTimeFormat;
public class Widget {
private String name;
@DateTimeFormat(pattern = "MM/dd/yyyy")
private LocalDate created;
// getters/setters excluded
}
При достижении значений из представления формы этому виджету формат даты работает безупречно. То есть, только строки даты в формате MM/dd/yyyy будут успешно конвертироваться в фактические объекты LocalDate. Отлично, мы на полпути.
Тем не менее, я также хотел бы также показать созданное свойство LocalDate в представлении JSP в том же формате MM/dd/yyyy, используя JSP EL, как это (при условии, что мой контроллер Spring добавил атрибут виджета в модель):
${widget.created}
К сожалению, это будет отображать только формат toString по умолчанию LocalDate (в формате yyyy-MM-dd). Я понимаю, что если я использую теги формы Spring, дата отображается по желанию:
<form:form commandName="widget">
Widget created: <form:input path="created"/>
</form:form>
Но я бы хотел просто отобразить форматированную строку даты без использования тегов формы Spring. Или даже тег JSTL fmt:formatDate.
Начиная с Struts2, HttpServletRequest был завернут в StrutsRequestWrapper, который позволил EL-выражениям как это фактически опросить значение OGNL стек. Поэтому мне интересно, если Spring предоставить что-то подобное этому, чтобы разрешить выполнение конверторов?
ИЗМЕНИТЬ
Я также понимаю, что при использовании тега Spring eval дата будет отображаться в соответствии с шаблоном, определенным в аннотации @DateTimeFormat:
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<spring:eval expression="widget.created"/>
Интересно, что при использовании пользовательского PropertyEditor для форматирования даты этот тег НЕ вызывается этим методом PropertyEditor getAsText и поэтому по умолчанию используется DateFormat.SHORT как описанный в документах. В любом случае, мне все равно хотелось бы узнать, есть ли способ добиться форматирования даты без использования тега - только с использованием стандартного JSP EL.