Richiama metodi diretti o metodi con argomenti / variabili / parametri in EL

Come posso JSF 2.0 invocare metodi diretti o metodi con argomenti / variabili / parametri in EL?

Ad esempio, ottenere la dimensione dell’elenco in EL:

 

Oppure invocare un metodo di azione con argomenti:

  

Questo non sembra funzionare nel mio ambiente. Non sembra gradire le parentesi.

javax.el.ELException: analisi errori: # {bean.list.size ()}
com.sun.el.parser.ParseException: Encountered “(”

    In EL standard prima di EL 2.2 da Java EE 6 non è ansible richiamare direttamente metodi come
    #{bean.method()} né invoca metodi con argomenti come #{bean.method(arg1, arg2) .

    Se l’aggiornamento a un contenitore compatibile ELE / Java EE 6 (Tomcat 7, Glassfish 3, JBoss AS 6, ecc.) Non è un’opzione e al momento si utilizza EL 2.1 / Java EE 5 (Tomcat 6, Glassfish 2, JBoss AS 4, ecc.), Quindi la soluzione migliore è installare JBoss EL . JBoss EL è un’implementazione conforms a EL 2.1 che supporta le stesse funzionalità di EL 2.2. L’installazione di JBoss EL consiste nel mettere jboss-el.jar in /WEB-INF/lib e aggiungere quanto segue al web.xml , assumendo che tu stia usando Mojarra:

      com.sun.faces.expressionFactory org.jboss.el.ExpressionFactoryImpl  

    Oppure, quando stai usando MyFaces:

      org.apache.myfaces.EXPRESSION_FACTORY org.jboss.el.ExpressionFactoryImpl  

    Un’alternativa per il tuo caso particolare è l’uso di fn:length di JSTL fn:length :

      

    Un’altra alternativa consiste nell’aggiungere un getter al bean che restituisce List#size() o in alcuni casi specifici una funzione EL personalizzata .


    Si noti quindi che il richiamo di metodi con argomenti in EL non è una funzionalità specifica di JSF 2.0. È una funzionalità specifica di EL 2.2. EL 2.2 fa parte di Java EE 6, di cui fa parte anche JSF 2.0. Quindi sembra una funzionalità specifica di JSF 2.0, ma non lo è. JSF 2.0 è retrocompatibile con Servlet 2.5 / EL 2.1 che non ha questa caratteristica. D’altra parte, JSF 1.x è compatibile con il Servlet 3.0 / EL 2.2, quindi sarebbe anche ansible utilizzare questa funzione in JSF 1.x, utilizzando anche JBoss EL su Servlet 2.5 / EL 2.1.

    La risposta di BalusC è corretta, tuttavia, quando si usa Maven, si dovrebbe escludere la dipendenza transitoria el-api 1.0 in questo modo:

      org.jboss.seam jboss-el 2.0.0.GA    javax.el el-api