使用ModelAttrbute批注将对象从jsp提交到控制器

时间:2013-07-03 14:51:55

标签: jsp spring-mvc modelattribute

我正在使用带有jsp / jstl的spring mvc 3.1.0。 要将对象提交给我的控制器,我正在使用ModelAttribute注释,一切正常。 但是,当我尝试向控制器提交一个复杂的对象时,他的值为null。 这是我的对象模型:

UorgVO.java

public class UorgVO {

    private String nom;
    private String nomAbrege;
    private UorgVO refUniteOrganisParent;

    //getters&Setters..
}

并且有我的jsp页面:

<form:form method="post" action="saveUorg.html"  modelAttribute="uorg" >
    <table>
        <tr>
            <th>Nom</th>
            <th>Nom abregé</th>
            <th>Unité père</th>
        </tr>
        <tr>
            <td><input  type="text" path="nom" name="nom"/></td>
            <td><input  type="text" path="nomAbrege" name="nomAbrege"/></td>
            <td>
                <select id="refUniteOrganisParent"
                        name="refUniteOrganisParent"
                    path="refUniteOrganisParent">
                    <option  value="null"> --- </option> 
                    <c:forEach items="${listeuos}" var="uorgg" varStatus="status" >
                        <option value="${uorgg}">${uorgg} </option> 
                    </c:forEach>
                </select>
            </td>
        </tr>
    </table> 
    <input type="submit" value="Enregistrer uorg"/> 
</form:form>

我的控制器是:

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

    System.out.println("My foreign attribute is:" +uorg.getRefUniteOrganisParent());
    return new ModelAndView("uorg_recherche");  
}   

打印值为null,但我的对象的其他属性已提交。

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我解决了这个问题,我希望它会帮助其他有相同问题的用户。 通过使用ConversionServiceFactoryBean的服务。 首先,我使用'form:select'和'form:input',有我的新jsp代码:

<td><form:input  path="email" type="text"/></td> 
<td>
<form:select path="refUniteOrganisParent.id" items="${listeuos}" itemValue="id" itemLabel="nom"/>
</td>

如您所见,我重试了所选项目的id值。

其次我使用了这个转换器:

public class UorgConverter implements Converter<Long, UorgVO>{

@Autowired  
private UorgService uo;

@Override
public UorgVO convert(Long id) {

   // actions dealing with the service, to retrieve Uorg object from the id sended by the jsp page

    return uorgItem;        
  }

}

之后我通过这样做配置我的xml文件:

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

<bean id="conversionService" class="my.package.ConversionServiceFactoryBean">
<property name="converters">
    <list>
        <bean class="converter.package.location.UorgConverter"></bean>
        <!--List of my converters -->
    </list>
</property>
</bean>

感谢所有参与此帖的人解决问题。

Mouhie。

答案 1 :(得分:0)

如果您使用表单访问该网站,则应发送模型。最好的方法是 来自return new ModelAndView("site","uorg", new UorgVO())

的控制者的method = GET