2010-08-26 17 views
28

Tengo una variable de lista llamada services en mi página JSP. Necesito agregar algo de marcado a la página si hay más de 1 elemento en la lista.Acceda al tamaño de una colección en JSP/JSTL/EL

Lo que me gustaría hacer es ...

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

Pero no se puede invocar métodos de objetos Java en EL (creo que esto es quizás el momento 364823782 me he arrepentido de ese hecho) . Solo puede acceder a getters en objetos Java soltando el 'get', p. Ej. $ {user.name} para una clase de usuario que tiene un método getName().

¿Cuál es la forma correcta de evaluar esta prueba?

Respuesta

45

Está buscando fn:length(services). Recuerde definir el espacio de nombres fn.

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

+1

Es la respuesta correcta, pero no es el tipo de respuesta que estaba muy animado para. Que dolor. ¿Por qué no podemos tener Groovy o Rhino en lugar de EL ... –

+0

Así es como es con JSP. Recomiendo encarecidamente actualizar a JSF y facelets. –

+0

[Aquí hay] (http://blog.smartkey.co.uk/2009/01/how-to-access-the-size-of-a-collection-in-a-jsp-page-using-jstl-el /) una buena publicación de blog sobre el mismo problema (que llega a la misma solución). Estoy de acuerdo en que JSP/EL es un chivo expiatorio, y puedo recomendar la actualización a Wicket. ;-) – Jonik

13

Incluir la lib etiqueta en el archivo JSP

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

Uso

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