2017-10-12 79 views
0

確定地圖<整數,列表 >列表的大小,我有以下地圖: 在JSTL <c:if>

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. 然後通過列表

回答

2

這是因爲

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

總是false

在表達式語言中,${1}被解釋爲Long,這與Integer鍵不符。基本上,你在這裏有效地做了namesById.get(1L)

更改您的地圖爲Map<Long, List<String>>,它會工作。

-1

使用jstl的,你可以從地圖鍵和值進行迭代。使用該值可以檢查大小。請查看以下示例。

<% 
    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? –