2014-10-02 3 views
3

JSTL의 문자열 인 숫자 인 해당 키를 기반으로 Hashtables 값에 액세스하려고합니다. 그러나 키 값을 증가/감소 시키면 더 이상 작동하지 않습니다.Hashtable 키 조작이 작동하지 않습니다.

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> 

출력은


현재 : 51
다음

하지만 내가 기대하는 것은 현재 전 50

입니다 : 51
NE XT 52

모든 의견을 환영합니다.

+0

getSortedList는 Hashtable을 사용하고 정렬 된 목록 을 반환합니다. – bkrish

답변

1

Map의 키가 String 인 경우 요소를 가져 오는 키가 있다면 String 값으로 쿼리해야합니다. 현재 솔루션에서 MapLong 값으로 쿼리합니다.
당신은 String에 번호를 변환 한 다음이 같은 Map 조회 할 수 있습니다

<fmt:parseNumber var="prevLineNumberKey" type="number" value="${lineNumber-1}" /> 

으로 :

<c:set var="prevLineNumberKey">${lineNumber-1}</c:set> 

그리고 대체 :

<c:set var="numberAsString">${50 - 1}</c:set> 
<c:out value="value: ${hashtableObj[numberAsString]}"/> 
+0

수정 된 키를 사용하여 해시 테이블에 액세스 할 수 있습니다. 감사! – bkrish

0

것은 교체 시도를

<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의 값은 실제로 키와 같은 숫자입니까? 즉 당신이 기대됩니다

전 50

... 그건 당신이 50로 해시 테이블 /지도의 을 기대하고 수단과 키는 50?

+0

감사합니다. 그러나 hashtableObj 값을 선택하는 것 같지 않습니다. 1.hashtableObj는 Hashtable입니다. 2. 값은 사실 하이퍼 링크입니다 (저는 알고 있습니다 : 그러나 그것은 레거시 앱입니다). 나는 방금 그것을 간단하게 유지하려고 노력했다. – bkrish

+0


과 함께
슬래시 후 아무것도 돌려주지 않니? – alfreema

0

해결 방법이 있습니다.

<fmt:parseNumber var="prevLineNumberKey" type="number" value="${lineNumber-1}" /> 
    <c:out value="Previous ${hashtableObj[sortedList[prevLineNumberKey-1]]}" escapeXml="false"/><br/> 

나는 목록 요소를 Hashtable의 키로 사용하고 작동합니다. 모든 답에 감사드립니다.

관련 문제