2017-10-12 15 views
0

JSTL 에지도 <정수, 목록 >에서 목록의 크기를 결정 나는 다음과 같은지도가 :

Map<Integer, List<String>> namesById= new HashMap<>() ; 

내가 JSP의지도를 반복 할을. 그러나 먼저 목록 크기가 특정 숫자보다 큰지 먼저 확인하고 싶습니다.

if (namesById.get(1).size() > 3) 
for (String s: namesById.get(1)){ 
     do something 
    } 

내가 JSP에서 작업을 수행해야합니다

그래서 나는이 (데모 용으로 넣어 테스트 번호)입니다 싶은. 필자는 JSTL의 초보자이므로 필자는이를 작성하는 방법을 정확히 알지 못하므로 디버깅하기가 어렵습니다.

<c:if test="${fn:length(namesById[1]) gt 3}" 

</c:if> 

그래서 내가하고 싶은 것입니다 : 나는이 표현과 노력 그리고 확인

  1. 첫 번째는 특정 키
  2. 을 제공하여지도의 목록을 얻을 경우 목록의 크기 이다
  3. 을 특정 숫자를 더 큰 그리고 JSTL은 당신이지도에서 키와 값을 얻을 수 있습니다 사용 목록

답변

2

.

표현식 언어에서 ${1}Long으로 해석되며 이는 Integer 키와 일치하지 않습니다. 기본적으로 여기에서 namesById.get(1L)을 효과적으로 처리하고 있습니다.

지도를 Map<Long, List<String>>으로 변경하면 제대로 작동합니다.

-1

반복. 이 값을 사용하여 크기를 확인할 수 있습니다. 다음 예제를 확인하십시오.

Integer.valueOf(1).equals(Long.valueOf(1)) 

항상 false이기 때문이다

<% 
    Map<Integer, List<String>> namesById = new HashMap<Integer, List<String>>(); 

    List<String> list = new ArrayList<String>(); 
    list.add("1"); 
    list.add("2"); 
    list.add("3"); 
    list.add("4"); 
    namesById.put(1, list); 

    list=new ArrayList<String>(); 
    list.add("3"); 
    list.add("4"); 
    namesById.put(2, list); 
    pageContext.setAttribute("itemList", namesById); 
%> 


<c:forEach items="${itemList}" var="entry"> 
    <c:if test="${fn:length(entry.value) gt 3}"> 
    Value > 3 
    </c:if> 
</c:forEach> 
+0

왜 downvoted? –