【问题标题】:How to access a modelAttribute with variable name from jQuery如何从 jQuery 访问带有变量名的 modelAttribute
【发布时间】:2012-11-17 18:46:50
【问题描述】:

我使用 Spring MVC 和 jQuery 在 JSP 中处理控制器发送的对象。

我的控制器正在使用以下方式向 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,那么它会将其视为一个 String,并说 String 没有任何名为 listFunctEnabled 的属性。

每个角色都需要一个表单,因为每个角色都需要一个按钮,以便更新其功能列表。

我怎样才能做到这一点?

【问题讨论】:

  • RoleForm 中的字段名为listEnabled。该列表的吸气剂是 getListFunctEndabled 还是 getListEndabled
  • 它被称为getListFunctEnabled。我不好,编辑时。

标签: spring model-view-controller jstl modelattribute modelandview


【解决方案1】:

您是否尝试将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>

【讨论】:

  • 是的,我试过了,但是没有用。我终于使用了另一种解决方法。我会在主题中发布它
【解决方案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>

该解决方案没有问题。我希望对其他人有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多