1

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

<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>

我通过将属性设置为字符串列表代替枚举值来使其工作。

4

3 回答 3

1

我本来希望这样做的。我在这里有一些代码,我可以在其中执行以下操作:

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

那行得通。是否出于某种原因需要将迭代变量放在页面范围内?

于 2013-06-25T17:20:44.110 回答
1

如果roleType是 a ,则在将其用作 a 的键enum时应使用method :.name()map

<td>${detailsMap[roleType.name()]}</td>
于 2018-09-19T08:31:32.033 回答
0

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

<c:forEach items="${roleTypes}" var="roleType">
<td>${detailsMap[roleType]}</td>

应该用这样的东西代替:

<c:forEach items="${roleTypes}" var="roleType">
<td>${detailsMap[${roleType}]}</td>

解释是roleType不是字符串,而是迭代器,你想要的是迭代器的值,因此你需要${}.

无法对此进行测试,但我认为这可能是个问题。

相关如何使用 jstl 在 HashMap 中迭代 Arraylist?.

祝你好运。

于 2013-06-25T19:06:48.397 回答