Dans la norme EL avant EL 2.2 from Java EE 6 vous ne pouvez pas invoquer directement des méthodes telles que
#{bean.method()}
ni invoquer des méthodes avec des arguments tels que #{bean.method(arg1, arg2)
.
Si vous passez à un EL 2.2/Java EE 6 conteneur compatible (Tomcat 7, Glassfish 3, JBoss AS 6, etc.) est ne pas une option et vous utilisez actuellement EL 2.1/Java EE 5 (Tomcat 6, Glassfish 2, JBoss AS 4, etc), alors votre meilleur pari est d'installer JBoss EL. JBoss EL est une implémentation compatible EL 2.1 qui supporte les mêmes fonctionnalités que EL 2.2. Installation JBoss EL est une question de mettre la jboss-el.jar
en /WEB-INF/lib
et en ajoutant ce qui suit à la web.xml
, en supposant que vous utilisez Mojarra:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
Ou, lorsque vous utilisez MyFaces:
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
Une alternative pour votre cas particulier est d'utiliser fn:length
de JSTL:
<h:outputText value="#{fn:length(bean.list)}" />
Une autre alternative consiste à ajouter un getter au bean qui renvoie List#size()
ou dans certains cas un custom EL function.
Veuillez noter par conséquent que l'appel de méthodes avec des arguments dans EL n'est pas une fonction spécifique à JSF 2.0. C'est une caractéristique spécifique à EL 2.2. EL 2.2 fait partie de Java EE 6, dont JSF 2.0 fait également partie. Donc, il ressemble à une caractéristique spécifique JSF 2.0, mais ce n'est pas le cas. JSF 2.0 est rétrocompatible avec Servlet 2.5/EL 2.1 qui n'a pas cette fonctionnalité. D'un autre côté, JSF 1.x est compatible avec Servlet 3.0/EL 2.2, donc il serait également possible d'utiliser cette fonctionnalité dans JSF 1.x, en utilisant également JBoss EL sur Servlet 2.5/EL 2.1.
en double? http: // stackoverflow.com/questions/206161/ –