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