Spring MVC的形式:选择标记,多选不具约束力是否正确?
-
22-08-2019 - |
题
我想创建一个表单编辑现有的数据库行。我使用Spring MVC的表单标签自动绑定的HTML表单支持对象。该行有许多与另一个表,这我试图使用形式的多个选择框来表示一对多关系:选择标记;
<form:select path="rules">
<form:options items="${bundle.rules}" itemValue="name" itemLabel="name"/>
</form:select>
我使用休眠的持久性,因此关系是表示作为捆绑POJO内一个HashSet。
private Set<Rule> rules = new HashSet<Rule>(0);
与网页上没有选择框,对象将更新到数据库中正确,但与选择框中选择对象不会更新到数据库中,我得到我的log4j日志此错误,请注意,这个错误并不引起异常,它是只在日志中可见的;
DEBUG org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:256) - Data binding errors: 1
此无论发生枯萎我取消选择选择框里面的物品,整个表格拒绝正确地提交。谁能帮我?
我知道如何做我绑定集合属性的Spring MVC 的一种形式,它类似于这个问题,遗憾的是没有任何的建议,似乎我的问题是有用的。
解决方案
问题是与提交表单的。春天是不是能够结合命令的对象,因此它不会提交表单,但将您重定向到FormView控件来代替。
当成功地执行了绑定,你会看到这条消息,而不是:
No errors -> processing submit
要解决你的问题,你需要与你的控制器上注册一个CustomCollectionEditor。 (见本链接)。这将是这样的:
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception
{
binder.registerCustomEditor(Set.class, "rules", new CustomCollectionEditor(Set.class)
{
protected Object convertElement(Object element)
{
String name = "";
if (element instanceof String)
name = (String) element;
return name != null ? new Rule(name) : null;
}
});
}
不隶属于 StackOverflow