JSTL, feijão e chamadas de método
Pergunta
Estou trabalhando em um JSP onde preciso chamar métodos em objeto que vêm de um feijão. A versão anterior da página não usa o JSTL e funciona corretamente. Minha nova versão tem uma configuração assim:
<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()}" />
A variável pageDividers
é um List
objeto.
Estou encontrando esta questão: quando peço pageDivider
Tamanho, uma exceção é lançada. Eu sei que este é um erro JTSL simples - o que estou fazendo de errado?
A mensagem de erro é:
O tamanho da função deve ser usado com um prefixo quando um espaço para nome padrão não é especificado
Como faço para acessar ou chamar corretamente os métodos dos meus pageDividers
objeto?
Solução
Ao usar o operador DOT para acesso à propriedade no JSTL, ${pageDividers.size}
(não () necessários) resulta em uma chamada para um método nomeado getSize()
.
Desde java.util.list oferece um método chamado size()
(ao invés de getSize()
) Você não poderá acessar o comprimento da lista usando esse código.
Para acessar um tamanho de lista, o JSTL oferece o FN: Comprimento função, usada como
${fn:length(pageDividers)}
Observe que para usar o fn namespace, você deve declarar o seguinte
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Além disso, a mesma função pode ser usada com qualquer tipo de coleção e também com strings.
Outras dicas
Para acessar a propriedade de um feijão usando o EL, você simplesmente nomeia a propriedade (não invoca o método). Então, digamos que você tenha um método chamado getSize () no feijão então
${pageDividers.size}
Aviso não ().
EDIT: Desculpe ... cometi um erro na postagem original.