Как получить доступ к ModelAttribute с именем переменной из jQuery

Я использую Spring MVC и jQuery для обработки в JSP объектов, отправленных контроллером.

Мой контроллер отправляет в JSP несколько объектов, используя:

modelAndView.addObject("roleForm" + rol.getRolecode(), 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>            

Свойство roleCode каждого RoleForm корректно извлекается, но оно не может получить доступ к свойству listFunctEnabled формы (оно пустое).

Если я непосредственно пишу имя формы (например, roleFormADMIN.listFunctEnabled), то он записывает каждый элемент списка в форме:option.

Если я использую roleForm${role}.listFunctEnabled, то он рассматривает это как строку и говорит, что у строки нет какого-либо свойства с именем listFunctEnabled.

Мне нужна одна форма для каждой роли, так как мне нужна одна кнопка для каждой роли, чтобы обновить ее список functenabled.

Как я мог этого добиться?

2 ответа

Решение

Я наконец-то решил проблему, используя 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>

И никаких проблем с этим решением. Я надеюсь, что может быть полезным для кого-то еще.

Вы пытались установить 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>
Другие вопросы по тегам