I’ ve una página JSF que muestra el contenido de una carpeta (en realidad es un dropbox del contenido de la cuenta).

Estoy usando una tabla de datos para representar el contenido de un ListArray objeto:

<h:dataTable style="text-align: left" width="600" var="dContent" value="#{backedBean.contents}">
  <h:column>
    <f:facet name="header">
      <f:verbatim>NAME</f:verbatim>
    </f:facet>
    <h:commandButton value="#{dContent.fileName}" action="#{backedBean.updateContents(dContent)}"/>
  </h:column>
  <h:column>
    <f:facet name="header">
      <f:verbatim>SIZE</f:verbatim>
    </f:facet>
    <h:outputText value="#{dContent.size}"/>
  </h:column>
</h:dataTable>

Pero cuando ejecuto esta página obtengo el siguiente error:

/browse.xhtml @34,110 action=»#{backedBean.updateContents(dContent)}»
Error de Análisis: #{backedBean.updateContents(dContent)}



Causada por: org.apache.el.analizador.ParseException: «Se Ha Encontrado
«(» «( «» en la línea 1, columna 28. Estaba esperando que uno de:

«}» …

«.» …

«[» …

«>» …

«gt» …

«<» …

«lt» …

«>=» …

«ge» …

Lo curioso es que Netbeans es capaz de autocompletar el nombre del método así que la imagen que mi backend bean es aceptar. El problema se produce sólo cuando llamo a un método con un parámetro.

Alguna idea?

Muchas gracias

InformationsquelleAutor Neos76 | 2011-03-11

3 Comentarios

  1. 39

    Pasando los argumentos del método fue introducido en EL 2.2. Así que esto sólo es posible si se está ejecutando en un Servlet 3.0 /EL 2.2 capaz contenedor como Tomcat 7, Glassfish 3, JBoss 6, etc y su web.xml se han declarado como por Servlet 3.0 especificación.

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    >
        <!-- Config here -->
    </web-app>

    Si no, a continuación, compruebe esta respuesta de alternativas con respecto a la obtención de la fila actual en tablas de datos, o esta respuesta con respecto a la colocación de la aplicación por EL que soporta el método de pasar argumentos por lo que se puede utilizar en Servlet 2.5 /EL 2.1 contenedores así.

    • Muchas gracias, me estaba investigando justo ahora que, probablemente, la razón es que mi contenedor (tomcat6) no admite esta característica. De hecho, la implementación de la aplicación en glassfish v3 que desaparezca el error. Muchas gracias.
    • Sólo una nota: he leído que los argumentos del método son compatibles en JSF 2.0 y Netbeans me deja configurar esta aplicación con tomcat 6 y con JSF 2.0 de apoyo. Son JSF 2.0 y EL 2.2 relacionado de algún modo?
    • No es una JSF 2.0 característica. Es EL 2.2. la característica. JSF 2.0 viene con Java EE 6, que a su vez también paquetes de Servlet 3.0 / EL 2.2. Por lo que look como una JSF 2.0 característica. Sin embargo, JSF 2.0 es compatible con Java EE 5, que a su vez haces Servlet 2.5 / EL 2.1, sin embargo, EL 2.1 no es compatible con esta.
  2. 3

    Jboss Seam también puede ayudar a obtener la función.

    Costura utiliza JBoss EL que proporciona una extensión para el estándar Unificado Lenguaje de expresiones (EL). JBoss EL proporciona una serie de mejoras que aumentan la expresividad y el poder de expresiones EL.

    Ejemplo:

    pasar cadenas literales el uso de comillas simples:
    <h:commandLink action="#{printer.println('Hello world!')}" value="Hello"/>

    o
    para la dinámica de valor
    <h:commandButton action="#{hotelBooking.bookHotel(hotel)}" value="Book Hotel"/>

    Limitación:

    JBoss EL no puede actualmente ser utilizado con JSP 2.1 como el compilador rechaza las expresiones de los parámetros. Por lo tanto, si desea utilizar esta extensión con JSF 1.2, usted tendrá que utilizar Facelets. La extensión funciona correctamente con JSP 2.0.

    • Funciona: estoy utilizando la Costura 2.2.0.GA, en JBoss 4.2.3.GA y richfaces 3.3.3.Final: mi código de trabajo: prestados=»#{bean.método(StringArgument)}»
  3. 1

    No ha sido en realidad un «hack» forma de hacer esto desde JSF 1.0. Usted acaba de crear un método en su backing bean que devuelve un Mapa, y usted puede utilizar JSF EL pasar cualquier objeto que desee a ese método, porque JSF piensa que se pasa la clave del mapa.

    Mientras tanto, en su backing bean método que devuelven un «impostor» mapa de instancia que no es en realidad un mapa de todos, de cuya get() método de delegados para el método que se quiere llamar. En su .xhtml o .archivo jsp, a continuación, puede utilizar la notación de corchetes para pasar la variable.

    La ampliación de HashMap es una forma de hacer el impostor mapa fácil de definir — sucinta suficiente para el uso de una clase interna anónima de esa manera.

    Este es un hack, pero ha funcionado bien para mí en el pasado.

Dejar respuesta

Please enter your comment!
Please enter your name here