2017-10-12 8 views
0

Ich habe die folgende Karte:Größe Liste in Map <Integer, Liste <String>> in JSTL <c:if>

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

Ich möchte durch die Karte in jsp iterieren. Zuerst möchte ich jedoch prüfen, ob die Listengröße größer als eine bestimmte Nummer ist.

Also, was ich will diese (Putting Prüfnummer zu Demonstrationszwecken), ist:

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

Ich brauche es in JSP zu tun. Da ich ein Anfänger in JSTL bin, weiß ich nicht genau, wie man es schreibt und es ist schwer zu debuggen. Ich habe versucht, mit diesem Ausdruck:

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

</c:if> 

Also, was ich tun möchte, ist:

  1. zuerst die Liste von der Karte erhalten, indem die spezifischen Schlüssel
  2. Dann überprüfen Sie geben, wenn die Größe der Liste ist größer, eine bestimmte Anzahl
  3. und dann durch die Liste iterieren

Antwort

2

Das ist, weil

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

immer false ist.

In der Ausdrucksprache wird ${1} als Long interpretiert, und dies stimmt nicht mit dem Schlüssel Integer überein. Im Grunde tun Sie hier effektiv eine namesById.get(1L).

Ändern Sie Ihre Karte zu Map<Long, List<String>> und es wird funktionieren.

-1

Mit jstl Sie den Schlüssel und den Wert von Karte bekommen. Mit diesem Wert können Sie die Größe überprüfen. Überprüfen Sie folgendes Beispiel.

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

Warum downvoted? –

Verwandte Themen