Нулевой атрибут Spring MVC в моем объекте @modelAttribute, отправленном в контроллер

Я пытаюсь использовать @modelAttribute для отправки атрибутов моей модели контроллеру.

моя модель содержит много атрибутов (String, Integer,..), один из них является объектом, который я хочу получить из тега select. проблема в том, что когда я передаю атрибут модели контроллеру, мой объект равен Null

JSP:

<form:form method="post" action="saveUorg.html"  modelAttribute="uorg" >
<table >
<tr>
    <th>Nom</th>
    <th>Nom abregé</th>
    <th>timbre</th>
    <th>Date début effet</th>
    <th>Date fin effet</th>
</tr>
<tr>
    <td><input  path="nom" name="nom"/></td>
    <td><input  path="nomAbrege" name="nomAbrege"/></td>
    <td><input  path="timbre" name="timbre"/></td>
    <td><input  type="date" path="dateDebutEffet" name="dateDebutEffet"/></td>
    <td><input  type="date" path="dateFinEffet" name="dateFinEffet"/></td>
 </tr>
</table> 
<table >
<tr>
    <th>email</th>
    <th>Unité père</th>
</tr>
<tr>
    <td><input  path="email" name="email"/></td>
    <td><select  path="refUniteOrganisParent">
        <option  value="-"> --- </option> 
      <c:forEach items="${listeuos}" var="uorgg" varStatus="status" >
        <option  value="${uorgg}">${uorgg} </option> 
      </c:forEach>
    </select></td>
 </tr>

это мой контроллер

    @RequestMapping(value ="/saveUorg", method = RequestMethod.POST)
    public ModelAndView saveUorg(@ModelAttribute("uorg") UorgVO uorg,BindingResult result){


        System.out.println("RefUniteOrganisParent:" +uorg.getRefUniteOrganisParent());


        return new ModelAndView("view","uorg",uorg);    
    }   

refUniteOragnisParent — это нулевой объект, когда я печатаю результат содержимого в моем контроллере uorg.refUniteOrganisParent, результат равен нулю. Заранее спасибо за помощь.


person Mouhie    schedule 28.06.2013    source источник
comment
Подпись метода контроллера? Учебный класс?   -  person a better oliver    schedule 28.06.2013
comment
@zeroflagL я отредактировал сообщение и добавил свой метод контроллера   -  person Mouhie    schedule 28.06.2013


Ответы (2)


Во-первых, ваш тег select не имеет атрибута имени.

Во-вторых, когда форма отправляется, контроллер получает только строки. Spring должен преобразовать каждый параметр в нужный вам тип. Он имеет встроенные преобразователи для простых типов, таких как Integer или Boolean, но не для сложных типов, не говоря уже о ваших собственных типах.

Итак, если атрибут refUniteOrganisParent является объектом и представлен только одним значением (значение option), вам необходимо реализовать преобразователь, который создает экземпляр на основе этого значения:

public class StringToMyType implements Converter<String, MyType> { ...

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/validation.html#core-convert

И вам необходимо зарегистрировать свой преобразователь: http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-config-customize

person a better oliver    schedule 28.06.2013

В вашем контроллере объект атрибута модели должен быть таким:

        @RequestMapping(value ="/saveUorg", method = RequestMethod.POST)
       public ModelAndView saveUorg(@ModelAttribute("uorg") UorgVO uorg,BindingResult result){

          ModelAndView mav = new ModelAndView("view");              
          mav.addObject("uorg",uorg);
          System.out.println("RefUniteOrganisParent:" +uorg.getRefUniteOrganisParent());

    return mav;    
}  
person user2507974    schedule 17.08.2013