Pregunta ¿Cuál es la función de @this exactamente?


Por lo que yo sé, @esta es denotar el componente actual que desencadena el evento, como:

<p:commandButton process="@this" ... />

Y en JSF 2 Ajax, el @esta también puede significar el componente encapsulante, como:

<h:inputText ...>
  <f:ajax execute="@this" ... />
</h:inputText>

Y tengo un caso donde estoy usando p: datatable, incluyendo o excluyendo @esta puede tener un impacto diferente sobre el envío parcial de Ajax

Aquí está el ejemplo, en este caso, el proceso está usando @esta, y esto funciona como se espera, donde cuando el proceso ocurre primero, y luego seguido por setPropertyActionListener y por último, el acción es ejecutado :

<p:column>
    <p:commandLink 
        value="#{anggaranDetail.map['code']}"
        process="@this infoAnggaranForm:Anggaran"
        update="detailDialogForm:Anggaran detailDialogForm:SubAnggaran"  
        oncomplete="infoAnggaranDialog.hide()" 
        image="ui-icon ui-icon-search"
        action="#{tInputBean.updateAnggaranSubAnggaran}">
        <f:setPropertyActionListener value="#{anggaranDetail}"
            target="#{infoAnggaranBean.selectedAnggaranDetail}" />
    </p:commandLink>
</p:column>

Pero cuando omito el @esta de este ejemplo, el setPropertyActionListener y el acción nunca se ejecutan, como si no estuvieran allí.

Me pregunto porque ? Quizás @esta tiene algún otro significado que no sea el componente actual, tal vez el registro actual en este ejemplo?

Estoy usando tomcat 7, y estas son mis dependencias:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-api</artifactId>
    <version>2.0.4-b09</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.faces</groupId>
    <artifactId>jsf-impl</artifactId>
    <version>2.0.4-b09</version>
    <scope>compile</scope>
</dependency>

32
2018-04-18 06:01


origen


Respuestas:


PrimeFaces process y JSF estándar execute los atributos deben apuntar a los identificadores de componentes separados por espacios de los componentes que JSF debe procesar durante todo el ciclo de vida de JSF tras una solicitud ajax (obtener parámetros de solicitud, validarlos, actualizar el modelo, ejecutar una acción). los process predeterminado a @form, la forma actual y la execute predeterminado a @this, el componente actual. En los enlaces / botones de comando, esto es obligatorio para ejecutar las acciones asociadas con el enlace / botón.

Sin embargo, en su datatable tiene process="@this infoAnggaranForm:Anggaran", por lo tanto, dos componentes para procesar. Si omites @this pero mantenga el otro componente, entonces solo procesará / ejecutará el otro componente y no el componente de enlace / botón. Si omites el process atributo que por defecto a @form. Si tiene más componentes de entrada en el mismo formulario, también se procesarán.

Dependiendo del requisito funcional concreto, podrías simplemente mantenerlo process="@this infoAnggaranForm:Anggaran"u omítalo JSF procesará / ejecutará al menos el botón y el otro componente, exactamente como lo desee.

Ver también:


34
2018-04-18 14:40