使用不在JSP中工作的映射中的键获取值

使用不在JSP中工作的映射中的键获取值,jsp,map,enums,key-value,Jsp,Map,Enums,Key Value,我有以下代码:detailsMap是LinkedHashMap类型的映射。我能够将值${roleType}作为L1,正确打印${detailsMap[“L1”]}的值,但不能打印${detailsMap[roleType]}。请说明我做错了什么。RoleType是枚举值 <c:set var="detailsMap" value="${hostDetails.value}" /> <c:forEach items="${roleTypes}" var="roleType

我有以下代码:detailsMap是LinkedHashMap类型的映射。我能够将值${roleType}作为L1,正确打印${detailsMap[“L1”]}的值,但不能打印${detailsMap[roleType]}。请说明我做错了什么。RoleType是枚举值

<c:set var="detailsMap" value="${hostDetails.value}" />
    <c:forEach items="${roleTypes}" var="roleType">
    <td>${detailsMap[roleType]}</td>
    <td>${detailsMap["L1"]}</td>
    <td><input type="text" name="${roleType}" value="" /></td>
    </c:forEach>
    </tr>
    </c:forEach>

${detailsMap[roleType]}
${detailsMap[“L1”]}


我将属性设置为字符串列表而不是枚举值,从而使其正常工作

我本以为这会奏效。我在这里有一些代码,我可以这样做:

<c:set var="roleType" value="${someOtherVariable}" scope="page"/>
<li class="${cssMap[roleType]}"/>


  • 这就行了。迭代变量是否出于某种原因需要放置在页面范围内?

    我不确定我是否很好地理解了这个问题,但从我对这部分的理解来看:

    <c:forEach items="${roleTypes}" var="roleType">
    <td>${detailsMap[roleType]}</td>
    
    
    ${detailsMap[roleType]}
    
    应替换为以下内容:

    <c:forEach items="${roleTypes}" var="roleType">
    <td>${detailsMap[${roleType}]}</td>
    
    
    ${detailsMap[${roleType}]}
    
    解释是,
    roleType
    不是字符串,而是迭代器,您需要的是迭代器的值,因此需要
    ${}

    无法测试这个,但我认为这可能是个问题

    相关的


    祝您好运。

    如果
    角色类型
    枚举
    ,当您将它用作
    映射的键时,应该使用
    .name()
    方法:

    <td>${detailsMap[roleType.name()]}</td>
    
    ${detailsMap[roleType.name()]}
    
    我只需要此迭代的迭代变量。但是我可以在.哼哼…得到角色类型的正确值。。。是否有必要在
    enum
    上迭代?现在,我传递的是字符串列表而不是enum值,它正在工作。谢谢你的帮助${detailsMap[${roleType}]}表达式出现错误。虽然我可以将${detailsMap[roleType]}与字符串列表一起使用。所以你制作了
    roleType
    字符串列表?好主意。是的,就在设置属性之前,我把它转换成了一个字符串列表。如果你能为下一代发布答案,那就太好了,这种类型的帖子可能会对很多新开发人员有用:)