我有以下设置:
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
列表中某些条目的 s 映射到 set foo
。
表单中的所有其他条目都设置为用户输入的值,因此整体语法应该是正确的。然而,当涉及到这个应该映射到 object.otherObject.foo 的多选表单时,控制器的行为就像视图中没有提供任何值一样,即即使我要在点击之前从框中选择多个值提交,command
Controller 中的对象仍然获得一个空的 otherObject.foo 成员。
有什么想法可能导致这种情况吗?
PS 我还尝试Set<String> foo
直接在 MyObject 中添加一个并在path=""
视图中使用它。它仍然没有成功。