Come chiamare un metodo con un parametro in JSF

Ho una pagina JSF che mostra il contenuto di una cartella (in realtà è il contenuto dell’account di una casella personale).

Sto usando un dataTable per rendere il contenuto di un object ListArray:

   NAME      SIZE     

Ma quando eseguo questa pagina ottengo il seguente errore:

/browse.xhtml @ 34,110 action = “# {backedBean.updateContents (dContent)}” Analisi errore: # {backedBean.updateContents (dContent)}


Causato da: org.apache.el.parser.ParseException: Encountered “” (“” (“” alla riga 1, colonna 28. Si aspettava una delle seguenti:
“}” …
“” …
“[” …
“>” …
“gt” …
“<" …
“lt” …
“> =” …
“ge” …

La cosa divertente è che Netbeans è in grado di completare automaticamente il nome del metodo, quindi immagino che il mio backend bean sia ok. Il problema si verifica solo quando chiamo un metodo con un parametro.

Qualche idea?

Grazie molto

Gli argomenti del metodo di passaggio sono stati introdotti in EL 2.2. Quindi questo è ansible solo se stai utilizzando un contenitore abilitato Servlet 3.0 / EL 2.2 come Tomcat 7, Glassfish 3, JBoss AS 6, ecc. E che il tuo web.xml è stato dichiarato secondo le specifiche Servlet 3.0.

 < ?xml version="1.0" encoding="UTF-8"?>    

In caso contrario, controllare questa risposta per le alternative relative all’ottenimento della riga corrente nei datatables o questa risposta per quanto riguarda la sostituzione dell’implementazione EL con una che supporta il passaggio degli argomenti del metodo in modo che sia ansible utilizzarlo su Servlet 2.5 / EL 2.1 contenitori pure.

Jboss Seam può anche aiutare a ottenere la funzione.

Seam utilizza JBoss EL che fornisce un’estensione allo standard Unified Expression Language (EL). JBoss EL offre una serie di miglioramenti che aumentano l’espressività e la potenza delle espressioni EL.

Esempio:

passare stringhe letterali usando le virgolette singole:

o per valore dinamico

Limitazione:

JBoss EL non può essere attualmente utilizzato con JSP 2.1 poiché il compilatore rifiuta le espressioni con i parametri. Pertanto, se si desidera utilizzare questa estensione con JSF 1.2, sarà necessario utilizzare Facelets. L’estensione funziona correttamente con JSP 2.0.

C’è stato un modo “hacking” di fare questo sin dal JSF 1.0. Devi solo creare un metodo sul tuo backing bean che restituisca una mappa, e puoi usare JSF EL per passare qualunque object tu voglia a quel metodo, perché JSF pensa che stai passando la chiave alla mappa.

Nel frattempo, nel metodo del bean backing in realtà si restituisce un’istanza della mappa “impostore” che non è affatto una mappa, il cui metodo get() delega al metodo che si desidera chiamare. Nel file .xhtml o .jsp, è ansible utilizzare la notazione della parentesi quadra per passare la variabile.

Estendere HashMap è un modo per rendere la mappa di HashMap facile da definire – abbastanza succinta da usare in questo modo una class interiore anonima.

Questo è un trucco, ma ha funzionato bene per me in passato.