У меня есть веб-приложение Spring загрузки и я отвергаю значение в контроллере, как это:Формат пружинные Ошибки аргументы сообщение
@RequestMapping(value = "/create", method = RequestMethod.POST)
public String createSubmit(@ModelAttribute("createForm") CreateForm createForm, BindingResult result, SessionStatus status) {
DateTime dt1 = createForm.getDt1();
DateTime dt2 = createForm.getDt2();
if (!dt1.isBefore(dt2)){
result.rejectValue("fieldId", "validation.isbefore", new Object[]{dt1, dt2}, "first date must be before second");
}
}
так, если дата dt1
не до того dt2
, значение отвергается. Теперь у меня есть довольно стандартный ResourceBundleMessageSource
с этой записью в messages_en.properties
:
validation.isbefore = Start date {0} must be before end date {1}
Когда ошибка проверки происходит, хотя, я получаю сообщение Start date 3/21/16 5:01 PM must be before end date 3/20/16 5:01 PM
(оба dt1
и dt2
использует их toString()
форматировать сообщение).
Теперь java.text.MessageFormat
поддерживает форматирование, а именно {0,date,short}
. Но это работает только для java.util.Date
, а не Joda Time (или любых других пользовательских классов, если на то пошло).
Есть ли способ настроить способ форматирования сообщений об ошибках? Я не хочу делать это во время проверки (в конечном коде сам валидатор отделен от контроллера, не имеет информации о выбранном языке, поэтому он не знает, какой формат даты использовать).
Действительно, вы не должны иметь дело с логикой представления на сервере. –
@ EngineerDollery хорошо сервер отвечает за генерацию HTML (это Spring MVC/Thymeleaf), поэтому мне приходится иметь дело с презентацией/локализацией на сервере. –
HTML для структуры, css (а иногда и javascript) отвечает за презентацию. Java отвечает за валидацию, бизнес-правила и CRUD. Для форматирования вам понадобится javascript, но это должно быть легко, если у вас есть дата, завернутая в легко идентифицируемый div. Тогда люди gui могут справиться с проблемами L & F, оставляя вас, чтобы продолжить писать код сервера. :) –