我有一个表单,可以根据用户在表单不同部分的选择动态生成复选框。这些复选框出现在屏幕上并且表现正常,但是在提交表单时,它们永远不会包含在请求中。从本质上讲,它的行为就像复选框元素没有绑定到模型对象一样。
这是支持对象。复选框应该绑定的字段是'存储':
public class GameplanGrouping {
private int id;
private Dba dba;
private String name;
private Set<String> stores = new LinkedHashSet<String>();
//Getters and Setters
}
以下是表格的相关部分,一旦生成全部内容:
<form id="createCategory" action="/gameplan/newGrouping" method="post" enctype="multipart/form-data"/>
...
<td>
<input type="checkbox" id="store_0" name="stores" value="13950" class="storeCheckBox"/>13950
</td>
这是控制器:
@RequestMapping(value={"/newGrouping"}, method = RequestMethod.POST)
public String submitAddGrouping(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes, @Valid @ModelAttribute("gameplanGrouping") GameplanGrouping grouping){
gpDao.insertGameplanGrouping(grouping);
redirectAttributes.addFlashAttribute("message",
"Successfully added new grouping '" + grouping.getName() + "' for division " + grouping.getDba().getName() + ".");
return "redirect:/groupings?division=" + grouping.getDba().getName();
}
所有其他绑定(例如&#39; name&#39;和#d;&#39;)都可以正常工作,但从不填充商店集。
奇怪的是,如果我复制其中一个生成的复选框并将其手动插入HTML,它会绑定并正确报告值。例如,如果我添加:
<input type="checkbox" id="store_dummy" name="stores" value="DUMMY" class="storeCheckBox"/>
DUMMY</td>
在单元格填充生成结果之前的表格并选择它,然后&#34; DUMMY&#34;作为&#34;商店&#34;的价值之一出现我提交时在后备对象中。为什么它绑定在一个案例中,而不是在动态生成的元素的情况下?
更新
正如评论中所建议的,我将Set切换到List,因为Spring不会绑定到Set,但这也没有帮助。行为是一样的。
但是,我感兴趣地注意到,作为Spring Boot 1.3.6的一部分打包的Spring MVC版本显然可以绑定到Sets,如下所示:
然而,如上所述,当我手动编码复选框元素时,我只能将其绑定。它在任何情况下都不会与JQuery生成的标记绑定。