【发布时间】:2012-02-02 04:06:49
【问题描述】:
我使用 ModelAttribute 在 Spring Web 应用程序中绑定对象。
一旦我注意到,如果一个对象的布尔值 A 为真,如果我们取消选中 A 的复选框,它的值将不会更新。
例如,我有一个具有属性“活动”= true 的课程对象。 在“编辑课程”视图中,我制作了一个绑定到“活动”的复选框。如果复选框被选中(绑定对象反映了更改),一切都会很好,但是如果我们取消选中复选框,对象课程不会改变。
进一步的研究告诉我,这是因为复选框值可能不会被浏览器提交(这是 HTML 的设计)。所以我只好用丑陋的request.getParameter来检查是否设置了值。
我刚来this question,我看到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>
【问题讨论】:
标签: java html spring spring-mvc freemarker