我正在尝试根据其密钥访问Hashtables值,该密钥是JSTL中的字符串数字。 但是如果我增加/减少键值,它就不再起作用了。
我在for循环中迭代排序的键列表。我使用此项来访问Hashtable。
<c:forEach items="${helper:getSortedList(hashtableObj)}" var="lineNumber" varStatus="loop">
<c:if test="${param.lineNbr eq lineNumber}">
<c:if test="${lineNumber>1}">
<fmt:parseNumber var="prevLineNumberKey" type="number" value="${lineNumber-1}" />
<c:out value="PREV ${hashtableObj[prevLineNumberKey]}" escapeXml="false"/><br/>
</c:if>
<c:out value="Current :${lineNumber}" /><br/>
<c:if test="${lineNumber<fn:length(hashtableObj)-1}">
<fmt:parseNumber var="nextLineNumberKey" type="number" value="${lineNumber+1}" />
<c:out value="NEXT ${hashtableObj[nextLineNumberKey+1]}" escapeXml="false"/><br/>
</c:if>
</c:if>
</c:forEach>
输出为
PREV
当前:51
下一页
但我的期望是
PREV 50
当前:51
下一页52
任何指针都表示赞赏。
答案 0 :(得分:1)
如果Map
中的密钥为String
而不是获取元素,则必须使用String
值进行查询。您当前的解决方案会使用Map
值查询Long
您可以将号码转换为String
,然后像这样查询Map
:
<c:set var="numberAsString">${50 - 1}</c:set>
<c:out value="value: ${hashtableObj[numberAsString]}"/>
答案 1 :(得分:0)
尝试更换:
<fmt:parseNumber var="prevLineNumberKey" type="number" value="${lineNumber-1}" />
使用:
<c:set var="prevLineNumberKey">${lineNumber-1}</c:set>
并替换:
<fmt:parseNumber var="nextLineNumberKey" type="number" value="${lineNumber+1}" />
<c:out value="NEXT ${hashtableObj[nextLineNumberKey+1]}" escapeXml="false"/><br/>
使用:
<c:set var="nextLineNumberKey">${lineNumber+1}</c:set>
<c:out value="NEXT ${hashtableObj[nextLineNumberKey]}" escapeXml="false"/><br/>
但有几个问题:
1)hashtableObj是哈希表还是哈希表? 2)hashtableObj的值是否真的是一个等于密钥的数字?换句话说,你期待:
PREV 50
...这意味着您希望哈希表/地图的值为50,密钥也是50?
答案 2 :(得分:0)
我找到了解决方法。
<fmt:parseNumber var="prevLineNumberKey" type="number" value="${lineNumber-1}" />
<c:out value="Previous ${hashtableObj[sortedList[prevLineNumberKey-1]]}" escapeXml="false"/><br/>
我使用list元素作为Hashtable的键,它可以工作。感谢所有答案。