1

有人可以帮我找出为什么我尝试将 Collection 绑定到 Spring MVC 中的表单不起作用吗?

这是我的对象的样子 -

public class TestObj {
   private Integer testNumber;
   private String home;
   private String destination;
}

这是我的表单对象,其中包含上述对象的列表 -

public class TestForm {
   private List<TestObj> testList;
   //contains getter and setter for testList
}

在我的控制器中,我实现了 formBackingObject 方法 -

public class MyController extends SimpleFormController {

    public MyController() {
        setCommandClass(TestForm.class);
        setCommandName("testForm");
    }

        protected Object formBackingObject(HttpServletRequest request) throws Exception {
           if (isFormSubmission(request)) {
              testForm = (TestForm) super.formBackingObject(request);
              //THIS ALWAYS RETURNS NULL ON FORM SUBMISSION 
              List<TestObj> testList = testForm.getTestList();
           } else {
              //load initial data using hibernate. TestObj is hibernate domain object.
              List<TestObj> testList = myService.findTestList();
              testForm = new TestForm(testList);
           }
           return testForm;
        }

这是我的 JSP 片段 -

<form:form commandName="testForm" method="post">
   <c:forEach items="${testForm.testList}" var="testvar" varStatus="testRow">
     <tr>
       <td>
          <form:hidden path="testList[${testRow.index}].home" />
          <c:out value="${testvar.home}" />
    </td>
    <td>
      <form:input path="testList[${testRow.index}].destination" />
    </td>
     </tr>
   </c:forEach>
   <tr><td><input type="submit"></td></tr>
</form:form>

虽然第一次加载数据时表单上显示良好,但当我按下提交按钮时,控件转到 formBackingObject 方法并且 isFormSubmission 返回 true。但是,当我使用 super.formBackingObject(request) 获取命令对象时,它会返回 testList 值为 null 的表单对象。我无法弄清楚为什么这个简单的案例不起作用?

我将非常感谢任何帮助使其正常工作。

4

3 回答 3

0

您使用的是 Spring 3 吗?如果是这样,你应该看看这篇文章

关于列表处理和对象绑定,看看这篇文章

于 2012-05-14T04:02:56.667 回答
0

尝试使用以下代码。也许这可以解决你的问题。

private List<TestObj> operationParameterses = LazyList.decorate(new ArrayList<TestObj>(), FactoryUtils.instantiateFactory(TestObj.class));

它不会返回你所有的空列表。

希望对您有所帮助。

干杯。

于 2012-05-14T05:32:23.497 回答
0

我想我对 formBackingObject 方法的理解一定是错误的。我从实现中删除了该方法,使用 referenceData 进行初始表单加载,并使用 onSubmit 在提交时对其进行处理。这可以正常工作,并且确实可以按预期返回表单中的集合。

谢谢大家的帮助。

于 2012-05-14T16:17:17.310 回答