发送给控制器的@modelAttribute对象中的Spring MVC null属性

时间:2013-06-28 15:17:06

标签: jsp spring-mvc modelattribute

我正在尝试使用@modelAttribute将我的模型属性发送到控制器

我的模型包含许多属性(String,Integer,..),其中一个是我想从select标签中检索的对象。 问题是当我将modelattribute传递给控制器​​时,我的对象是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是null对象,当我在uorg.refUniteOrganisParent的控制器中打印内容结果时,结果为null。 提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

首先,您的select代码没有名称属性。

第二,提交表单时,控制器只获取字符串。 Spring必须将每个参数转换为您想要的类型。它有内置的转换器,适用于简单类型,如IntegerBoolean,但不适用于复杂类型,更不用说您自己的类型了。

因此,如果属性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

答案 1 :(得分:0)

在您的控制器中,模型属性对象应如下所示:

        @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;    
}