java - Spring Form 一对多绑定(bind)对象

标签 java spring jsp spring-mvc spring-form

我有一个问题。 我使用 Spring Mongo Data、Web、mvc ecc... 我想将一个复杂的对象与其依赖项绑定(bind)在一起,但我的解决方案不起作用。

这是代码:

型号

public class Foo {

   @Id
   private String id;

   private String nome;

   private String descrizione;

   private Date dataCreazione;

   private Date dataUltimaModifica;

   @DBRef
   private Dependency dependency;   //getters and setters
}


public class Dependency {
   @Id
   private String id;

   @Indexed(unique = true)
   private String nome;

   private String descrizione;

   private Date dataCreazione;

   private Date dataUltimaModifica;

  //GETTERS AND SETTERS

}

Controller

@RequestMapping(value = Constants.ADD, method = RequestMethod.GET)
public String add(Model model) {

    Foo foo = new Foo();
    model.addAttribute("fooForm", foo);
    model.addAttribute("depList",depService.getList());

    return "foo/add";
}

@RequestMapping(value = Constants.ADD, method = RequestMethod.POST)
public String addPost(@ModelAttribute("fooForm") Foo foo, BindingResult result, Model model) {
   //Check if foo is not null
}

查看

<form:form class="form-horizontal" method="post" modelAttribute="fooForm" action="${addFoo}">
    <spring:bind path="dependency">
       <div class="form-group">
         <label for="dependency" class="col-sm-2 control-label">Dependency</label>
         <div class="col-sm-10">
         <form:errors path="dependency" class="control-label" />
           <form:select path="dependency" title="Dependency" >
             <form:option value="">&nbsp;</form:option>
               <form:options items="${depList}" />
           </form:select>
           <p class="help-block mb-0">Select a dependency</p>
         </div>
      </div>
   </spring:bind>
   <spring:bind path="nome">
     <div class="form-group">
       <label for="nome" class="col-sm-2 control-label">Nome</label>
       <div class="col-sm-10">
       <form:errors path="nome" class="control-label" />
          <form:input path="nome" type="text" class="form-control" id="nome" placeholder="Nome Foo" />
       <p class="help-block mb-0">Specificare il nome of Foo</p>
       </div>
    </div>
 </spring:bind>
 <spring:bind path="descrizione">
    <div class="form-group">
       <label for="descrizione" class="col-sm-2 control-label">Descrizione</label>
        <div class="col-sm-10">
           <form:errors path="descrizione" class="control-label" />
              <form:input path="descrizione" type="text" class="form-control" id="descrizione" placeholder="Descrizione" />
      <p class="help-block mb-0">Inserire una breve descrizione per Foo</p>
        </div>
     </div>
  </spring:bind>
  <div class="form-group">
      <div class="col-sm-offset-2 col-sm-10">
          <button type="submit" class="btn btn-rounded btn-primary btn-sm">Salva</button>
      </div>
  </div>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />

当我发布表单时,我得到了 nome 和 descrizione 的正确值,但依赖项始终为空......为什么?

示例:

 //METHOD POST
 public String addPost(@ModelAttribute("fooForm") Foo foo, 
        BindingResult result, Model model) {

      foo.getNome is not null
      foo.getDescrizione is not null
      foo.getDependency is always null ... why?
 }

提前致谢。

最佳答案

我已经找到解决办法了!非常简单!

我们需要一个转换器对象,因为绑定(bind)表单返回依赖项 ID,而不是整个对象!

好吧,这就是解决方案:

转换器


    
    public class DependencyConverter implements Converter {
        @Autowired
        private CategoriaRepository repository;

        @Override
        public Categoria convert(String id) {
            return repository.findById(id);
        }
    }
    

Now we register the converter in our application-context.xml

<mvc:annotation-driven conversion-service="conversionService"/>

<bean id="conversionService"
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="myPackage.DependencyConverter" />
        </set>
    </property>
</bean>

就这些了...

我希望这对将来有所帮助......

再见...

关于java - Spring Form 一对多绑定(bind)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35689262/

相关文章:

java - EOF/函数参数无效(错误号 :4022) with Jetty 9

java - JTree 难题 : Tree vs. 通过 vector 扩展进行分支

java - 当属性是通用属性时,使用 xstream 将 XML 反序列化为对象

java - 如何在 Java Web 应用程序中声明启动 Hook

java - JSP 标记处理程序访问上下文参数

java - 折线未显示在 Api v2 android 上

spring - fmt formatNumber 类型 ="currency"显示 "¤"而不是实际的货币符号

java - 如何使用Spring Cloud Netflix Zuul作为SSL反向代理

java - Struts 2中通过表上传文件

javascript - 在 JavaScript 中访问 Java/Servlet/JSP/JSTL/EL 变量