java - ejemplos de jstl
JSTL, Frijoles y llamadas a métodos (2)
Estoy trabajando en un JSP donde necesito llamar a métodos sobre objetos que provienen de un Bean. La versión anterior de la página no usa JSTL y funciona correctamente. Mi nueva versión tiene una configuración como esta:
<jsp:useBean id="pageBean" scope="request" type="com.epicentric.page.website.PageBean" />
<c:set var="pageDividers" value="<%= pageBean.getPageDividers() %>" />
<c:set var="numColumns" value="${pageDividers.size()}" />
La variable pageDividers
es un objeto List
.
Me encuentro con este problema: cuando pageDivider
el tamaño de pageDivider
, se lanza una excepción. Sé que este es un error simple de JTSL: ¿qué estoy haciendo mal?
El mensaje de error es:
El tamaño de la función se debe usar con un prefijo cuando no se especifica un espacio de nombre predeterminado
¿Cómo pageDividers
o llamo correctamente a los métodos de mi objeto pageDividers
?
Cuando se utiliza el operador de puntos para el acceso a propiedades en JSTL, ${pageDividers.size}
(no () necesario) da como resultado una llamada a un método llamado getSize()
.
Como java.util.List ofrece un método llamado size()
(en lugar de getSize()
) no podrá acceder a la longitud de la lista utilizando ese código.
Para acceder a un tamaño de lista, JSTL ofrece la función fn: length , utilizada como
${fn:length(pageDividers)}
Tenga en cuenta que para usar el espacio de nombre fn , debe declararlo de la siguiente manera
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Además, la misma función se puede usar con cualquier tipo de colección, y también con Strings.
Para acceder a la propiedad de un frijol usando EL, simplemente debe nombrar la propiedad (no invocar el método). Entonces digamos que tienes un método llamado getSize () en el bean entonces
${pageDividers.size}
Observe que no ().
EDITAR: Perdón ... cometió un error en la publicación original.