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


Por lo que sé, el @this {[6] } es para denotar el componente actual que desencadena el evento, como:

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

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

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

Y tengo un caso en el que usar p: datatable , incluyendo o excluyendo @this puede tener un impacto diferente en Ajax partial submit

Aquí está el ejemplo, en este caso, el proceso está usando @this, y esto funciona como se esperaba, donde cuando el proceso sucede primero, y luego seguido por setPropertyActionListener y por último, se ejecuta la acción :

<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 @this de este ejemplo, el setPropertyActionListener y la acción nunca se ejecutan, como si no estuvieran allí.

Me pregunto por qué ? Tal vez @this 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>
Author: Book Of Zeus, 2011-04-18

1 answers

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

Sin embargo, en su datatable tiene process="@this infoAnggaranForm:Anggaran", por lo tanto dos componentes para procesar. Si omite @this pero mantiene el otro componente, entonces solo procesará/ejecutará el otro componente y no el componente link/button. Si omite el atributo process, el valor predeterminado será @form. Si tiene más componentes de entrada en el mismo formulario, también se procesarán.

Dependiendo del requisito funcional concreto, podría simplemente mantenerlo process="@this infoAnggaranForm:Anggaran", u omitirlo. JSF se luego procesa / ejecuta al menos tanto el botón como el otro componente, exactamente como quieras.

Véase también:

 35
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:31:56