操作Hashtable键无法正常工作

时间:2014-10-02 21:57:33

标签: java jsp jstl

我正在尝试根据其密钥访问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

任何指针都表示赞赏。

3 个答案:

答案 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的键,它可以工作。感谢所有答案。