Spring MVC和复杂视图模型中的Modelbinding问题

时间:2013-11-18 20:34:34

标签: jsp spring-mvc jstl model-binding

针对复选框的模型绑定似乎不适用于技能列表。我知道javascript是一个选项,但是,现在我坚持使用jsp / jstl路由。

// PersonViewModel.java
public class PersonViewModel {
    private String fullName;
    private Integer experienceInYears

    private List<SkillItemViewModel> skillList;

    /*  getters and setters */
}

// SkillItemViewModel.java
public class SkillItemViewModel {
    private Long skillId;
    private String skillName;
    private Boolean skillSelected;

        /*  getters and setters */

}

// controller GET Action

@RequestMapping("person/edit")
public ModelAndView editPerson (HttpServletRequest request, HttpServletResponse response) {

 /* set the view model from the model and attach it to the Model and View object  */



}

// controller POST Action
@RequestMapping("person/update")
public ModelAndView updatePerson(HttpServletRequest request, @ModelAttribute("personViewModel") PersonViewModel viewModel, BindingResult result){
   /*
    on debugging viewModel.skillList is null
   */
}




// Edit Person jsp code snippet editProfile.jsp
<c:set var="loopVar" value ="0">
<ul>
<c:forEach var="item" items="${personViewModel.skillList}">
<spring:bind path="personViewModel.skillList[${loopVar}].skillSelected">
    <input type="checkbox" name="chkSkill${item.skillId}" ${item.skillSelected?'checked':''}>
    <label for="chkSkill${item.skillId}">${item.skillName}</label>
</spring:bind>    
</c:forEach>
</ul>


<c:set var="loopVar" value ="${loopVar + 1}">

1 个答案:

答案 0 :(得分:0)

听起来像是一个有约束力的问题。您是否尝试过使用Spring的<form:checkbox>代码而不是<spring:bind>?它将自动生成复选框属性以及Spring用于确定复选框是“开启”还是“关闭”的隐藏字段。

此外,您应该使用varStatus循环变量来跟踪索引。

<强> editProfile.jsp

<ul>
<c:forEach var="item" items="${personViewModel.skillList}" varStatus="status">
    <form:checkbox path="skillList[${status.index}].skillSelected" id="chkSkill${item.skillId}"/>
    <label for="chkSkill${item.skillId}">${item.skillName}</label>   
</c:forEach>
</ul>