springMVC:view不会向控制器提交值

时间:2013-06-07 10:09:58

标签: java jsp spring-mvc

我有以下设置:

public class MyController extends BaseFormController {
  public MyController() {
    setCommandClass(MyObject.class);
    setCommandName("object");
    setSessionForm("true);
  }

  @Override
  protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)
        throws Exception {
    MyObject o = (MyObject) command;
    ...
  }

MyObject有一个MyOtherObject类型的成员,而MyOtherObject又有一个成员Set<String> foo

public class MyObject {
  ...
  MyOtherObject otherObject;
  ...
}

public class MyOtherObject {
  ...
  Set<String> foo = new HashSet<String>();
  ...
}

实现了所有相应的setter和getter。然后我有了一个用jsp编写的视图:

<form:form method="POST" action="" commandName="object" ...
...
    <form:select path="otherObject.foo" multiple="multiple" size="4">
      <c:forEach var="entry" items="${listOfItems}">
        <option value="${entry.size}" <c:if test="${!entry.enabled}">disabled</c:if>>${entry.name}</option>
      </c:forEach>
    </form:select>
 ...
 </form:form>

我的目标是将列表中某些条目的size映射到集foo

表单中的所有其他条目都设置为用户键入的值,因此整体语法应该是正确的。然而,当涉及到应该映射到object.otherObject.foo的这个多选表单时,控制器就好像在视图中没有提供任何值,即使我在命中之前从框中选择多个值提交时,Controller中的command对象仍然会获得一个空的otherObject.foo成员。

可能导致此问题的任何想法?

P.S。我还尝试在MyObject中直接添加Set<String> foo并在视图的path=""中使用它。它仍然没有成功。

2 个答案:

答案 0 :(得分:0)

您是否覆盖了formBackingObject方法?如果是,您是否将MyOtherObject分配给MyObject?

答案 1 :(得分:0)

经过大量的探索后,我发现了解决方案 - foo必须被声明为String[] foo,并且从那里开始照顾所有其余的,就像预期的那样。打败我为什么春天会在这个时代使用“老式”阵列,但显然确实如此。