Я использовал ModelAttribute для привязки объекта в веб-приложении Spring.
Как только я заметил, что , если объект имеет логическое значение A, это значение true, его значение не будет обновлено, если снять флажок A с помощью флажка.
Например, у меня есть объект Lesson, у которого есть атрибут "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);
}
...
}
Просмотр кода:
<form id="lesson" class="EditorForm" action="${rc.getContextUrl('/test.html')}" method="post" >
<fieldset>
<legend><@spring.message code="lesson.edit"/></legend>
<@spring.formHiddenInput "lesson.id" />
<@spring.formHiddenInput "lesson.studio.id" />
<div class="Entry">
<label for="name"><@spring.message code="lesson.message"/></label>
<@spring.formInput "lesson.message" />
<span class="ErrorMessage"><@spring.showErrors "<br/>" /></span>
</div>
<input type="checkbox" name="active" checked="checked" />
<label for="active">${rc.getMessage('lesson.active')}</label>
<input type="submit" value="<@spring.message code='common.update' />" />
</fieldset>
</form>