Я использовал ModelAttribute для привязки объекта в веб-приложении Spring.
Как только я заметил, что в случае, если объект имеет логическое значение A, истинно, его значение не будет обновлено, если мы снимем флажок A .
Например, у меня есть объект «Урок» с атрибутом «active» = true. В режиме «Редактировать урок» я устанавливаю флажок, который привязывается к «активному». Все работает хорошо, если флажок установлен (объект привязки отражает изменения), но объект урока не изменится, если мы снимем флажок.
Дальнейшие исследования говорят мне, что это связано с тем, что значение флажка не может быть отправлено браузером (это встроенный дизайн HTML). Поэтому я должен использовать уродливый request.getParameter
, чтобы проверить, установлено ли значение.
Я только что получил этот вопрос и вижу, что asp.net mvc предоставляет способ более элегантно обойти его. Я думаю, что Spring должен предоставить нечто подобное. Кто-нибудь знает, как это сделать?
Вот мой код:
Код контроллера:
@RequestMapping(value="/test", method = RequestMethod.POST)
public String processEditLesson(@Valid Lesson lesson, BindingResult bindingResult, Model model) {
System.out.println("Lesson is active: " + lesson.isActive()); // still "true" even if the checkbox is unset
// Current work-around
String isActive = request.getParameter("active");
if (StringUtils.isNotNullOrEmpty(isActive)) {
lesson.setActive(true);
} else {
lesson.setActive(false);
}
...
}
Просмотреть код: