Здесь простое значение 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.