Invocar métodos directos o métodos con argumentos / variables / parámetros en EL

¿Cómo puedo en JSF 2.0 invocar los métodos directos o métodos con argumentos /variables /parámetros en EL?

Por ejemplo, el tamaño de la lista en EL:

<h:outputText value="#{bean.list.size()}" />

O la invocación de un método de acción con argumentos:

<h:commandButton value="edit" action="#{bean.edit(item)}" />

Esto no parece funcionar en mi entorno. No parece como los paréntesis.

javax.el.ELException: Error de Análisis: #{bean.lista.size()}
com.sol.el.analizador.ParseException: «Se Ha Encontrado(«

OriginalEl autor DD. | 2010-07-19

2 Kommentare

  1. 53

    En EL estándar antes de EL 2.2 de Java EE 6 directamente no se puede invocar métodos como

    #{bean.method()} ni invocar métodos con argumentos como #{bean.method(arg1, arg2).

    Si actualizar a una EL 2.2 /Java EE 6 compatible con contenedor (Tomcat 7, Glassfish 3, JBoss 6, etc) no es una opción y que está utilizando actualmente EL 2.1 /Java EE 5 (Tomcat 6, Glassfish 2, JBoss 4, etc), entonces su mejor apuesta es para instalar JBoss EL. JBoss EL es EL 2.1 compatible con la aplicación que soporta las mismas características que EL 2.2. La instalación de JBoss EL es una cuestión de poner el jboss-el.jar en /WEB-INF/lib y agregando lo siguiente a la web.xml, asumiendo que usted está utilizando Mojarra:

    <context-param>     
        <param-name>com.sun.faces.expressionFactory</param-name>
        <param-value>org.jboss.el.ExpressionFactoryImpl</param-value>   
    </context-param>

    O, cuando usted está usando 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 el uso de JSTL del fn:longitud:

    <h:outputText value="#{fn:length(bean.list)}" />

    Otra alternativa es agregar un getter para el bean que devuelve List#size() o en algunos casos específicos personalizado EL de la función.


    Tenga en cuenta lo que la invocación de métodos con argumentos que EL no es un JSF 2.0 característica específica. Es EL 2.2 característica específica. EL 2.2 es parte de Java EE 6, que JSF 2.0 también es parte de. Así que aspecto una JSF 2.0 función específica, pero no lo es. JSF 2.0 es compatible con Servlet 2.5 /EL 2.1 que carece de esta característica. Por otro lado, JSF 1.x se reenvía compatible con Servlet 3.0 /EL 2.2, así que también sería posible utilizar esta función en JSF 1.x luego, también en el uso de JBoss en EL Servlet 2.5 /EL 2.1.

    Se utiliza para el método de valor de ui:repeate con ajax? Se refieren a : stackoverflow.com/questions/12884049/…

    OriginalEl autor BalusC

  2. 0

    BalusC la respuesta es correcta, sin embargo, cuando se utiliza maven, debe excluir el-api 1.0 una dependencia transitiva como este:

    <dependency>
        <groupId>org.jboss.seam</groupId>
        <artifactId>jboss-el</artifactId>
        <version>2.0.0.GA</version>
        <!-- exclude el-api 1.0 transitive dependency -->
        <exclusions>
            <exclusion>
                <groupId>javax.el</groupId>
                <artifactId>el-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    OriginalEl autor Hrotkó Gábor

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea