Jsp Spring MVC和复杂视图模型中的模型绑定问题
针对复选框的模型绑定似乎不适用于技能列表。我知道javascript是一个选项,但是,现在我坚持使用jsp/jstl路由Jsp Spring MVC和复杂视图模型中的模型绑定问题,jsp,spring-mvc,jstl,model-binding,Jsp,Spring Mvc,Jstl,Model Binding,针对复选框的模型绑定似乎不适用于技能列表。我知道javascript是一个选项,但是,现在我坚持使用jsp/jstl路由 // PersonViewModel.java public class PersonViewModel { private String fullName; private Integer experienceInYears private List<SkillItemViewModel> skillList; /* get
// 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}">
//PersonViewModel.java
公共类PersonViewModel{
私有字符串全名;
私有整数经验数
私人列表技能列表;
/*接球手和接球手*/
}
//SkillItemViewModel.java
公共类SkillItemViewModel{
私人长斯基利;
私有字符串skillName;
选择专用布尔函数;
/*接球手和接球手*/
}
//控制器获取操作
@请求映射(“个人/编辑”)
公共模型和视图编辑器(HttpServletRequest请求,HttpServletResponse响应){
/*从模型中设置视图模型,并将其附着到模型和视图对象*/
}
//控制器后动作
@请求映射(“个人/更新”)
公共模型和视图更新person(HttpServletRequest请求,@ModelAttribute(“personViewModel”)personViewModel视图模型,BindingResult结果){
/*
调试时,viewModel.skillList为空
*/
}
//编辑人员jsp代码片段editProfile.jsp
${item.skillName}
听起来像是一个绑定问题。您是否尝试过使用Spring的
标记而不是
?它将自动生成复选框属性以及一个隐藏字段,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>
${item.skillName}