1

コントローラーから送信されたオブジェクトを 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 つのフォームが必要です。

どうすればこれを達成できますか?

4

2 に答える 2

0

modelAttribute値を別の変数に設定してから、listFunctEnabledリストにアクセスしようとしましたか? これが私が考えていることです。

<c:set var="roleFormName" value="roleForm${role}"/>

次に、これを選択タグで使用します

<form:select  path="listFunctEnabled" id="combo1" size="5" multiple="true">     
     <form:options items="${roleFormName.listFunctEnabled}" />
</form:select>
于 2012-11-29T20:43:48.623 に答える
0

セットではなく HashMap を使用して、最終的に問題を解決しました。したがって、私のコントローラーでは、すべてのロール (ハッシュマップのキー) の listFunctEnabled のリストでマップを埋めています。例: map[ROLE_ADMIN] = {Funct1, Funct2, Funct3}

RoleForm は同じままなので、選択した項目は listFunctEnabled プロパティに格納されます。

ここで、JSP で次のようにアクセスします。

<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="${map[role]}" />
                </form:select>

            </fieldset>
        </div>
    </fieldset>
</form:form>

そして、そのソリューションに問題はありません。他の誰かに役立つことを願っています。

于 2012-12-04T11:05:06.643 に答える