Chiamate JSTL, Beans e Method
Domanda
Sto lavorando su un JSP in cui devo chiamare metodi su oggetti che provengono da un bean. La versione precedente della pagina non utilizza JSTL e funziona correttamente. La mia nuova versione ha una configurazione come questa:
<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 variabile pageDividers
è un oggetto List
.
Riscontro questo problema: quando chiedo le dimensioni di pageDivider
, viene generata un'eccezione. So che si tratta di un semplice errore JTSL: cosa sto facendo di sbagliato?
Il messaggio di errore è:
La dimensione della funzione deve essere utilizzata con un prefisso quando non viene specificato uno spazio dei nomi predefinito
Come posso accedere o chiamare correttamente i metodi del mio oggetto pageDividers
?
Soluzione
Quando si utilizza l'operatore punto per l'accesso alle proprietà in JSTL, $ {pageDividers.size}
(non è necessario () ) si ottiene una chiamata a un metodo denominato
Poiché java.util.List offre un metodo chiamato size ()
(anziché getSize ()
) non potrai accedere alla lunghezza dell'elenco utilizzando quel codice.
Per accedere alle dimensioni di un elenco, JSTL offre la funzione fn: length , usata come
${fn:length(pageDividers)}
Nota che per usare lo spazio dei nomi fn , devi dichiararlo come segue
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Inoltre, la stessa funzione può essere utilizzata con qualsiasi tipo di raccolta e anche con Stringhe.
Altri suggerimenti
Per accedere alla proprietà di un bean usando EL basta semplicemente nominare la proprietà (non invocare il metodo). Supponiamo quindi di avere un metodo chiamato getSize () nel bean, quindi
${pageDividers.size}
Avviso no ().
EDIT: mi dispiace ... ha fatto un errore nel post originale.