Spring MVC Bean转换

时间:2017-01-24 13:19:23

标签: java spring spring-mvc

我有一个POJO,我在JSP表单中成功使用。我可以显示表单,并可以将结果发回。这是modelAttribute bean

public class FooAdminWebDTO implements Serializable {

private static final long serialVersionUID = -5296961362891142744L;

private List<FooDTO> FooDTOList;
private String success = "success"; //..etc

除了我的JSP页面之外,这是一个:

    <form:form method="post" class="form-horizontal" id="viewForm"
           action="${pageContext.request.contextPath}/FooAdmin/saveFoo" modelAttribute="FooAdminWebDTO">

        <div class="form-group">
        <form:label class="col-sm-2" path="FooDTO" for="FooDTO" required="true">XYZ:</form:label>
        <form:input class="col-sm-5" path="FooDTO" id="FooDTO" type="number" value="${FooAdminWebDTO.FooDTO.FooXYZ}" required="true"/>
    </div>

    <div class="form-group">
        <form:label class="col-sm-2" path="success" for="success" required="true">Success:</form:label>
        <form:input class="col-sm-5" path="success" id="success" type="text" value="SUCCESS" required="true"/>
    </div>

问题出在我的POST区域。我成功地使用了正确的控制器方法:

    @RequestMapping(value = "/FooAdmin/saveFoo", method = RequestMethod.POST)
public ModelAndView saveFooByID(@ModelAttribute("FooAdminWebDTO") FooAdminWebDTO s, BindingResult bindingResult) {
    return new ModelAndView();
}

但是,正如预期的那样,我只看到成功字段的内容被Spring填充。成功字段是一个简单的字符串。 (所有其他复杂字段均为空)。

这是对象:FooDTO:

@JavascriptMappable
public class FooDTO implements Serializable {

private static final long serialVersionUID = -5974170234812308892L;
private String FooDescription;
private int additionQuantity;

等。

有人可以指导我如何做到这一点吗?我使用XML进行配置,所以任何涉及配置的答案,请记住这一点。我有很深的嵌套对象,需要一种方法将我的对象绑定到传入的POST对象。

谢谢。

3 个答案:

答案 0 :(得分:0)

您在路径中的路径值:输入应映射到您要在对象中填充的属性。

e.g。 对于ProductAdminWebDTO.ProductDTO.productPartNumber的输入标记,路径应该类似于path="productDTO.productPartNumber"

您可以在http://docs.spring.io/spring/docs/current/spring-framework-reference/html/view.html#view-jsp-formtaglib-formtag找到更多信息 或form binding的简单解释。在您的情况下,您需要访问嵌套对象,就像显示时一样,使用.

答案 1 :(得分:0)

回顾一下HttpMessageConverter负责将HTTP请求消息转换为一个相关的java对象。在我们的例子中,想要在发出请求时将JSON转换为java对象。 Spring将专门查找与mime类型关联的HttpMessageConverter以执行转换。

您必须将jackson依赖项添加到项目中,并在spring中注册为消息转换器。

检查一下:Spring 3.0 making JSON response using jackson message converter

答案 2 :(得分:0)

发现错误。这是一块JQuery

     $('#viewForm input').attr("disabled", true);
    $('#viewForm select').attr("disabled", true);

我在JSP的其他地方使用它来使字段不可编辑。我忘了重新启用表单,这就是为什么它没有正确提交。感谢那些试图提供帮助的人。