【发布时间】:2015-04-24 08:36:19
【问题描述】:
我想知道为什么我不能使用 jstl 中的键从外部哈希表中获取值,键是整数值,值是内部哈希表,我正在处理一些遗留代码,因此原因哈希表,以这种形式从存储过程调用返回。
奇怪的是,在我的 forEach 循环中处理内部哈希表时,我能够得到这些值...${data['NAME']} 实际上确实有效。
我可以使用 JSTL forEach 循环遍历整个外部哈希表,并且可以,但是如果我尝试获取像 ${missing_ciphers[1]} 甚至 ${missing_ciphers['1']} 这样的值,则不会返回任何内容。
打印时的哈希表如下所示:
{4={SOURCE=D, NAME=D}, 3={SOURCE=C, NAME=C}, 2={SOURCE=B, NAME=B}, 1={SOURCE=A, NAME=A}}
我可以使用以下代码循环遍历它,但列表不是我想要的顺序,所以我想使用循环计数器通过它们的键取出对象,但这似乎没有返回任何东西(一旦我按照我的意愿工作,内联样式将被移动到一个 css 文件中......):
<c:forEach items="${missing_ciphers}" var="ciphers" varStatus="cipher_loop">
<c:set var="data" value="${ciphers.value}">
</c:set>
<tr style="border-left: none; border-right: none;" class="${cipher_loop.index % 2 == 0 ? 'even' : 'odd'}">
<td><span style="font-weight: bold;">${data['SOURCE']}</span></td>
<td><span style="font-weight: bold;">${data['NAME']}</span></td>
</tr>
</c:forEach>
谁能帮助我了解这里发生了什么以及为什么我无法使用 ${missing_ciphers[1]} 类型语法获取值?
我应该补充一点,以下代码确实将内部哈希表打印到 tomcat 控制台:
<% System.out.println("val: " + ((Hashtable)request.getAttribute("missing_ciphers")).get(1)); %>
我什至尝试了以下方法,看看它是否归结为仍然无法从外部哈希表中获取的键的类型:
<c:forEach items="${missing_ciphers}" var="ciphers" varStatus="cipher_loop">
<c:set var="counter" value="${cipher_loop.index + 1}" />
<fmt:parseNumber var="fmt_counter" integerOnly="true" type="number" value="${counter}" />
<c:out value="${fmt_counter}" />
<c:set var="data" value="${missing_ciphers[fmt_counter]}"></c:set>
<tr style="border-left: none; border-right: none;" class="${cipher_loop.index % 2 == 0 ? 'even' : 'odd'}">
<td><span style="font-weight: bold;">${data['SOURCE']}</span></td>
<td><span style="font-weight: bold;">${data['NAME']}</span></td>
</tr>
</c:forEach>
谢谢
【问题讨论】:
标签: java foreach jstl hashtable