当前位置: 首页 > 面试题库 >

复选框值为false时不会绑定到对象吗?

宗政浩慨
2023-03-14
问题内容

我使用 ModelAttribute 在Spring Web应用程序中绑定对象。

一旦我注意到, 如果对象的布尔值A为true,那么如果我们取消选中A的checkbox,则其值将不会更新

例如,我有一个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>

问题答案:

Spring具有内置的解决方法。

只需将此额外的隐藏字段添加到表单中:

<input type="hidden" value="on" name="_active"/>

带下划线的参数是某种标记,用于指示存在具有相同名称但不带下划线的复选框参数。

lesson.active如果仅_active=on提交,则Spring现在应该设置为false 。



 类似资料:
  • 本文向大家介绍aurelia 绑定到复选框,包括了aurelia 绑定到复选框的使用技巧和注意事项,需要的朋友参考一下 示例 基本复选框 带有对象数组的复选框 带有布尔值的复选框            

  • 我的发帖方法: 索引页表单: 当我单击submit时,browser显示为错误的请求,但没有th:field=“*{userRole}”,我可以提交表单。有什么办法解决这个问题吗? 然后如@roel所述更改了表单。 多谢了。

  • 我有一个带有一个属性Boolean的对象数组。尝试将此属性绑定到checkbox i无法工作。 参见下面的plunkr https://plnkr.co/edit/dsqcjrqd5kfowcsczze 我得到和错误

  • 问题内容: 我有几个复选框: 我想绑定到控制器中的列表,以便每当更改复选框时,控制器都维护所有检查值的列表,例如。 ng-model似乎只能将一个复选框的值绑定到控制器中的变量。 还有另一种方法可以使四个复选框绑定到控制器中的列表吗? 问题答案: 有两种方法可以解决此问题。使用简单数组或对象数组。每个解决方案都有其优缺点。您会在下面找到每种情况的一种。 用简单的数组作为输入数据 HTML可能如下所

  • 我有几个复选框: 我希望绑定到控制器中的一个列表,这样,每当更改复选框时,控制器就会维护所有选中值的列表,例如,。 ng-model似乎只能将一个复选框的值绑定到控制器中的一个变量。 有没有另一种方法可以这样做,以便我可以将四个复选框绑定到控制器中的一个列表?

  • 对于剑道中的绑定行为,似乎有一个相当奇特的设计决策。 我试图绑定一个null值到一个下拉列表。如果(远程来源的)值为null,那么Kendo将生成对象以绑定到该值,例如,使用下拉列表的data-value-field/value。这使得保存修改后的视图模型非常不可靠,因为现在整个对象将被传输,而不是简单的数据类型。 示例:为。从下拉列表中选择值后,如 值(JSON)然后是而不是 有人对此有一个好的