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 ?

È stato utile?

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 getSize () .
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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top