Java SpringMVC复选框绑定问题

Java SpringMVC复选框绑定问题,java,spring,spring-mvc,Java,Spring,Spring Mvc,问题:复选框值未正确绑定到我的表单。结果是我所有的布尔值都是空的(至少那些没有被绑定的值是空的),并且现有的值不会被用户更改的值更新 详细信息:我知道,如果未选中复选框,则不会将其提交到服务器。但是,在连接Eclipse调试器时,我确实看到了请求中的值。使用jQuery/Datatable填充数据,但使用表单submit将数据发布回服务器 Spring MVC版本:3.2.8 我假设它的配置,但我不认为我错在哪里。下面是我在控制器中所做工作的一个小代码片段 @Controller public

问题:复选框值未正确绑定到我的表单。结果是我所有的布尔值都是空的(至少那些没有被绑定的值是空的),并且现有的值不会被用户更改的值更新

详细信息:我知道,如果未选中复选框,则不会将其提交到服务器。但是,在连接Eclipse调试器时,我确实看到了请求中的值。使用jQuery/Datatable填充数据,但使用表单submit将数据发布回服务器

Spring MVC版本:3.2.8 我假设它的配置,但我不认为我错在哪里。下面是我在控制器中所做工作的一个小代码片段

@Controller
public class CheckboxController {
    ...
    @RequestMapping(value = "saveCheckboxes*", method = RequestMethod.POST)
    public String saveCheckboxes(@ModelAttribute(SESSION_FORM_KEY) CheckboxForm form, BindingResult result, ModelMap model) {

          // VALIDATE HERE...
          if ( !result.hasErrors() ) {
              // SAVE
          }
          else {
              // DON'T SAVE (alert user)
          }
    }
}
因此,SpringMVC用于将请求输入绑定到我的表单。该表单定义如下,其中包含一个具有布尔属性的摘要对象列表

public class CheckboxForm {
    private List<Summary> summaries;
    ...
}

public class Summary {
   private boolean selected;
   ...
}

表示该属性无法评估。对于返回的每个属性都会发生这种情况。但是,我可以确认请求中的内容正是我所期望的输入。

首先,除非您知道为什么在
@RequestMapping
方法中避免使用相对URL。这是导致错误的常见原因

接下来,当您直接生成复选框时,不需要添加
spring:checkbox
,您将不会收到自动错误消息,并且如果未选中最后一个复选框的值,您可能会遇到获取最后一个复选框值的问题,因为它们不会通过浏览器传输,spring将永远不会看到它们给出较短的列表(如果全部未选中,甚至是空列表)

话虽如此,您的问题是您使用了
checkboxForm.summaries[index]。选中了
而Spring只希望
summaries[index]。选中了
。删除
checkboxForm
,您的控制器应该会影响
@modeldattribute checkboxForm
的值

var tableWidget = (function($) {

init = function() {
    ...
    "aoColumnDefs": [
         { "aTargets": [0], "sName": "", "mData": "selected" "stype": "html", "sClass": "center", "mRender": renderCheckbox, "bSortable":false, "sWidth": "50px" }
    ...
};

renderCheckbox = function(source, type, row) {
    var $name  = 'checkboxForm.summaries['+row.index+'].selected';
    return createCheckbox($name, source);
};

createCheckbox = function(name, checked) {
    var $checked = (checked === true) ? ' checked="checked"' : '';
    return '<input type="checkbox" name="'+name+'" value="true"'+$checked+'/><input type="hidden" name="_'+name+'" value="on"/>';
}
...
))(jQuery);
public boolean isWritableProperty(String propertyName)