コントローラーから送信されたオブジェクトを JSP で処理するために、Spring MVC と jQuery を使用しています。
私のコントローラーは、次を使用して複数のオブジェクトを JSP に送信しています。
modelAndView.addObject("roleForm" + rol.getRolecode(), form);
form は次のクラスのオブジェクトです。
public class RoleForm
{
private String roleCode;
private LinkedHashSet<String> listEnabled;
... getters and setters ...
}
そのため、roleFormADMIN、roleFormUSER などのキーを持つオブジェクトを送信しています。これらのオブジェクトはデータベースから取得されるため、数量と名前は不明です。
私の JSP では、ロールごとに対応する RoleForm にアクセスしています。
<c:forEach items="${rolesList}" var="role">
<div class="role" id="${role}">
<label class="adminSectionTitle">
${role}
</label>
<form:form method="post" id="roleForm${role}" modelAttribute="roleForm${role}" action="roles.html">
<fieldset>
<form:hidden path="roleCode"/>
<div class="pickList">
<fieldset class="pickItems">
<legend >Enabled</legend>
<form:select path="listFunctEnabled" id="combo1" size="5" multiple="true">
<form:options items="${listFunctEnabled}" />
</form:select>
</fieldset>
</div>
</fieldset>
<div class="formButtons">
<input type="submit" value="<fmt:message key="button.save"/>" />
<input type="button" name="reset" onclick="location.href='<c:url value="roles.html"/>'" value="<fmt:message key="button.clear"/>" />
</div>
</form:form>
</div>
</c:forEach>
各 RoleForm のプロパティ roleCode は正しく取得されますが、フォームのプロパティ listFunctEnabled にアクセスできません (空です)。
フォームの名前 (たとえば、roleFormADMIN.listFunctEnabled) を直接記述すると、リストのすべての項目が form:option に書き込まれます。
roleForm${role}.listFunctEnabled を使用すると、これは文字列と見なされ、文字列には listFunctEnabled と呼ばれるプロパティがないと表示されます。
functenabled のリストを更新するには、役割ごとに 1 つのボタンが必要なので、役割ごとに 1 つのフォームが必要です。
どうすればこれを達成できますか?