Tengo un problema con un enlace p:commandButton de una propiedad en un backing bean. He tratado de simplificar mi código para mostrar una idea general.

ExampleBean es un backing bean

public class ExampleBean {

    public String title;        
    List<ExampleWrapper> list;

    //Getters and setters

}

ExampleWrapper es un POJO

public class Wrapper {

    public String name;
    public String description;

    public CommandButton button;

    //Listener which changes button state

    //Getters and setters
}

índice.xhtml es una página principal:

<h:form>
    <h:outputText value="Title" />
    <p:inpurText value="#{exampleBean.title}"

    <ui:include src="list.xhtml">
        <ui:param name="bean" value="#{exampleBean}">
    </ui:include>
</h:form>

lista.xhtml es un fragmento quiero ser reutilizados en algunos lugares:

<ui:composition ...>
    <ui:repeat id="list" var="exampleWrapper" value="#{bean.list}">
        <h:outputText value="#{exampleWrapper.name}"/>
        <h:outputTextarea value="#{exampleWrapper.description}"/>
        <p:commandButton id="button" binding="#{exampleWrapper.button}" 
            value="Button" />
</ui:composition>

Así que, me voy excepción:
javax.el.PropertyNotFoundException: /lista.xhtml … binding=»#{exampleWrapper.botón}»: Destino Inalcanzable, identificador ‘exampleWrapper’ resueltos a null

Sin binding atributo todo funciona y muestra fina

Podría explicar por qué y cómo puedo botón enlazar a este POJO propiedad? Cualquier ayuda será apreciada

Estoy usando JSF 2.0.2 con Primefaces 3.0.1

InformationsquelleAutor nikagra | 2012-03-15

1 Comentario

  1. 6

    La binding (y id) atributo de una JSF componente de interfaz de usuario se ha resuelto durante la vista en el momento de la compilación. El #{exampleWrapper} instancia es no disponible durante la vista en el momento de la compilación. La vista de tiempo de construcción es el momento en que el XHTML archivo se analiza en un árbol de componentes JSF. El #{exampleWrapper} sólo está disponible durante el renderizado de la vista de tiempo. El renderizado de la vista es el momento en que el árbol de componentes JSF genera el HTML de salida.

    Básicamente, sólo hay uno <p:commandButton> en el árbol de componentes que genera su salida HTML varias veces como muchos como el <ui:repeat> se repite. Usted necesita para unirse a la #{bean} en su lugar, o el uso de JSTL <c:forEach> en lugar de <ui:repeat>. Las etiquetas JSTL se ejecuta es decir, durante la vista de tiempo de construcción y el <c:forEach> se producen físicamente múltiples JSF componentes de interfaz de usuario. Pero, más a menudo, la unión de los componentes de la copia de frijoles es innecesario en JSF 2.x. Cualquiera que sea requisito funcional que he tenido en mente para que usted pensó que esta es la solución, definitivamente puede ser resuelto de una mejor manera.

    • Así que, ¿cómo puedo cambiar el botón de estado de otro oyente?
    • El uso de los mismos siempre los atributos de lugar. E. g. rendered="#{exampleWrapper.rendered}", styleClass="#{exampleWrapper.styleClass}", disabled="#{exampleWrapper.disabled}", etc.
    • He encontrado tu respuesta a otra pregunta: stackoverflow.com/a/2456652/657792
    • Siéntase libre de hacer una nueva pregunta si stucks. Esto es a saber, offtopic.
    • Esto significa que cada vez que utilizamos binding, si nos manualmente actualizar la página (f5), el contenido de la encuadernada componente puede llegar a ser desordenado, debido a la explicación que hizo anteriormente?

Dejar respuesta

Please enter your comment!
Please enter your name here