如何绑定Spring窗体:复选框而不是窗体:复选框?

如何绑定Spring窗体:复选框而不是窗体:复选框?,spring,checkbox,data-binding,spring-form,Spring,Checkbox,Data Binding,Spring Form,我对表单:复选框有问题。我无法使其显示选定的值。当我选择值并提交时,正确的值将显示在数据库中。当我加载页面时,所有值(复选框)均未选中 以下元素位于该内部: <form:form role="form" commandName="user" class="form-horizontal" action="${form_url}"> </form:form> 控制器具有以下方法: @InitBinder public void initBinder(WebDataBind

我对表单:复选框有问题。我无法使其显示选定的值。当我选择值并提交时,正确的值将显示在数据库中。当我加载页面时,所有值(复选框)均未选中

以下元素位于该内部:

<form:form role="form" commandName="user" class="form-horizontal" action="${form_url}">
</form:form>
控制器具有以下方法:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(Role.class, new RolePropertyEditor());
}
控制器方法:

@RequestMapping(value = "/update/{userId}", method = RequestMethod.GET)
public String updateUser(@PathVariable Integer userId, Model model) {
    User user = userService.getByUserId(userId);
    List<Role> availableRoles = roleService.getAllRoles();

    model.addAttribute("availableRoles", availableRoles);
    model.addAttribute("user", user);

    return "user/update";
}
@RequestMapping(value=“/update/{userId}”,method=RequestMethod.GET)
公共字符串updateUser(@PathVariable Integer用户标识,模型){
User=userService.getByUserId(userId);
List availableRoles=roleService.getAllRoles();
model.addAttribute(“availableRoles”,availableRoles);
model.addAttribute(“用户”,用户);
返回“用户/更新”;
}

调试会话后,我找到了解决方案

由于Spring内部的原因,JSP应该如下所示:

<c:forEach items="${availableRoles}" var="r">
    <div class="checkbox">                          
        <form:checkbox path="roles" label="${r.description}" value="${r}"  />
    </div>
</c:forEach>
public class RolePropertyEditor extends PropertyEditorSupport {

    @Override
    public void setAsText(String text) {
        Role role = new Role();
        role.setId(Integer.valueOf(text));
        setValue(role);
    }

}
@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(Role.class, new RolePropertyEditor());
}
@RequestMapping(value = "/update/{userId}", method = RequestMethod.GET)
public String updateUser(@PathVariable Integer userId, Model model) {
    User user = userService.getByUserId(userId);
    List<Role> availableRoles = roleService.getAllRoles();

    model.addAttribute("availableRoles", availableRoles);
    model.addAttribute("user", user);

    return "user/update";
}
<c:forEach items="${availableRoles}" var="r">
    <div class="checkbox">                          
        <form:checkbox path="roles" label="${r.description}" value="${r}"  />
    </div>
</c:forEach>
@Override
public String getAsText() {
    Role role = (Role) this.getValue();
    return role.getId().toString();
}