我想创建一个表单编辑现有的数据库行。我使用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;
    }
  });
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top