In serie EL prima EL 2.2 from Java EE 6 non è possibile richiamare direttamente metodi come
#{bean.method()}
né invocare metodi con argomenti come #{bean.method(arg1, arg2)
.
Se l'aggiornamento a un EL 2.2/Java EE 6 contenitore compliant (Tomcat 7, Glassfish 3, JBoss AS 6, ecc) è non un'opzione e al momento stai utilizzando 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 conforme a EL 2.1 che supporta le stesse funzionalità di EL 2.2. Installazione di JBoss EL è una questione di mettere il jboss-el.jar
in /WEB-INF/lib
e aggiungendo quanto segue alla web.xml
, partendo dal presupposto che si sta utilizzando Mojarra:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
Oppure, quando si sta utilizzando MyFaces:
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
un'alternativa per vostro caso particolare è quello di utilizzare di fn:length
JSTL:
<h:outputText value="#{fn:length(bean.list)}" />
Un'altra alternativa è aggiungere un getter al bean che restituisce List#size()
o in alcuni casi specifici uno custom EL function.
Si noti quindi che il richiamo di metodi con argomenti in EL non è una funzionalità specifica di JSF 2.0. È una caratteristica specifica di EL 2.2. EL 2.2 fa parte di Java EE 6, di cui fa parte anche JSF 2.0. Quindi lo ha l'aspetto di una caratteristica 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 possibile utilizzare questa funzione in JSF 1.x, utilizzando anche JBoss EL su Servlet 2.5/EL 2.1.
duplicato? http: // StackOverflow.it/questions/206161/ –