2010-08-26 14 views
28

Nella mia pagina JSP ho una variabile di lista chiamata services. Devo aggiungere qualche markup alla pagina se c'è più di 1 elemento nell'elenco.Accesso alle dimensioni di una raccolta in JSP/JSTL/EL

Quello che mi piacerebbe fare è ...

<c:if test="${services.size() gt 1}"> 
    <!-- markup... --> 
</c:if> 

Ma non si può invocare metodi su oggetti Java in EL (credo che questo è forse il 364.823.782 volta che ho rimpianto il fatto) . Puoi accedere ai getters solo su oggetti Java lasciando cadere "get", ad es. $ {user.name} per una classe User che ha un metodo getName().

Qual è il modo giusto per valutare questo test?

risposta

45

Stai cercando fn:length(services). Ricordarsi di definire lo spazio dei nomi fn.

http://download.oracle.com/javaee/5/tutorial/doc/bnalg.html

+1

E 'la risposta giusta, ma non è il tipo di risposta che davvero il salto di. Che dolore. Perché non possiamo avere Groovy o Rhino invece di EL ... –

+0

Questo è solo il modo in cui è con JSP. Consiglio vivamente l'aggiornamento a JSF e facelets. –

+0

[Ecco qui] (http://blog.smartkey.co.uk/2009/01/how-to-access-the-size-of-a-collection-in-a-jsp-page-using-jstl-el /) un bel post sul blog sullo stesso problema (che arriva alla stessa soluzione). Sono d'accordo che JSP/EL succhiano e posso raccomandare l'aggiornamento a Wicket. ;-) – Jonik

13

Includere il lib tag nel file JSP

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 

Usa

<c:if test="${fn:length(services) gt 1}"> 
<!-- markup... --> 
</c:if> 
Problemi correlati