次のセットアップがあります。
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 型のメンバーがあり、これには次のメンバーがありますSet<String> foo
。
public class MyObject {
...
MyOtherObject otherObject;
...
}
public class MyOtherObject {
...
Set<String> foo = new HashSet<String>();
...
}
対応するすべてのセッターとゲッターが実装されています。次に、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
しても、コントローラー内のオブジェクトはまだ空の otherObject.foo メンバーを取得します。
これを引き起こしている可能性のあるアイデアはありますか?
PSまたSet<String> foo
、MyObjectに直接追加してpath=""
、ビューで使用しようとしました。それでもうまくいきませんでした。