En EL norma antes de EL 2.2 from Java EE 6 no se puede invocar directamente métodos como
#{bean.method()}
ni invocar métodos con argumentos como #{bean.method(arg1, arg2)
.
Si la actualización a una/Java EE 6 recipiente compatible EL 2,2 (Tomcat 7, Glassfish 3, JBoss AS 6, etc) es no una opción y actualmente está utilizando EL 2.1/Java EE 5 (Tomcat 6, Glassfish 2, JBoss AS 4, etc.), entonces su mejor opción es instalar JBoss EL. JBoss EL es una implementación que cumple con EL 2.1 que admite las mismas funciones que EL 2.2. Instalación de JBoss EL es una cuestión de poner la jboss-el.jar
en /WEB-INF/lib
y añadiendo lo siguiente a la web.xml
, asumiendo que está usando Mojarra:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
O, cuando se está utilizando MyFaces:
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
Una alternativa para su caso particular es utilizar de fn:length
JSTL:
<h:outputText value="#{fn:length(bean.list)}" />
Otra alternativa es agregar un getter al bean que devuelve List#size()
o en algunos casos específicos a custom EL function.
Tenga en cuenta que invocar métodos con argumentos en EL no es una característica específica de JSF 2.0. Es una característica específica EL 2.2. EL 2.2 es parte de Java EE 6, del cual JSF 2.0 también forma parte. Por lo tanto, se parece a una característica específica de JSF 2.0, pero no lo es. JSF 2.0 es retrocompatible con Servlet 2.5/EL 2.1 que carece de esta característica. Por otro lado, JSF 1.x es compatible con Servlet 3.0/EL 2.2, por lo que también sería posible utilizar esta función en JSF 1.x y también con JBoss EL en Servlet 2.5/EL 2.1.
duplicado? http: // stackoverflow.com/questions/206161/ –