Как отобразить отформатированное DateTime в Spring MVC 3.0?
У меня есть поле Joda-DateTime в моей модели и вы хотите отобразить его в формате JSP. Я аннотировал его с помощью новой аннотации @DateTimeFormat:
public class Customer {
private DateTime dateOfBirth;
@DateTimeFormat(style="M-")
public DateTime getDateOfBirth() {
return dateOfBirth;
}
}
Теперь я хочу показать dateOfBirth в своем JSP:
Date of birth: ${customer.dateOfBirth}
Но результат неформатирован:
Date of birth: 2010-08-11T11:23:30.148+02:00
После некоторых исследований выяснилось, что я должен использовать тег spring: bind-tag:
<spring:bind path="customer.dateOfBirth">
Date of birth: ${status.value}
</spring:bind>
С этим он работает. Но для этой простой задачи это кажется слишком сложным. И использование этого метода в списках еще более усложняется, так как вам нужно интегрировать индекс list в путь привязки.
Итак, мой вопрос: есть ли более простой способ отображения форматированного значения с помощью аннотаций spring?
Ответы
Ответ 1
Используйте тег spring:eval
, который понимает правило @DateTimeFormat
:
<spring:eval expression="customer.dateOfBirth" />
В качестве альтернативы вы можете удалить правило @DateTimeFormat
из своей модели вместе и использовать тег joda formatDate, как показывает Naikus.
В будущем выпуске Spring планирует поддерживать подключение "SpEL", который является "<17676 > выражением", вызывается spring: eval, как стандартная реализация Unified EL для ваших страниц JSP. Это позволило бы встраивать линейные выражения типа ${customer.dateOfBirth}
через SpEL. Вы можете проголосовать за этот запрос расширения здесь: https://jira.spring.io/browse/SPR-7459.
Ответ 2
Поскольку это объект dodetime joda, а не объект Date, вам придется написать собственную функцию форматирования или пользовательский тег.
Если вы можете каким-то образом преобразовать его в java.util.Date, вы можете использовать встроенную jstl fmt taglibrary.
<fmt:formatDate value="${customer.dateOfBirth}" type="both"
pattern="MM-dd-yyyy" />
Но последний jsp быстро позволяет вам создать custom tags.