Pour autant que je sache, le @ this est pour désigner le composant actuel déclenchant l'événement, tel que:
<p:commandButton process="@this" ... />
Et dans JSF 2 Ajax, le @ this peut également signifier le composant d'encapsulation, comme:
<h:inputText ...>
<f:ajax execute="@this" ... />
</h:inputText>
Et j'ai un cas où l'utilisation de p: datatable, incluant ou excluant @ this peut avoir un impact différent sur la soumission partielle Ajax
Voici l'exemple, dans ce cas, le processus utilise @ this, et cela fonctionne comme prévu, où le processus se produit en premier, puis suivi par setPropertyActionListener et enfin, le action est exécuté:
<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>
Mais quand j'omets le @ this de cet exemple, le setPropertyActionListener et le action ne sont jamais exécutés, comme s'ils n'étaient pas là.
Je me demande pourquoi ? Peut-être @ this a une autre signification que le composant actuel, peut-être l'enregistrement actuel dans cet exemple?
J'utilise Tomcat 7, et voici mes dépendances:
<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>
Les attributs PrimeFaces process
et JSF execute
standard doivent pointer vers des identificateurs de composants séparés par des espaces des composants que JSF doit traiter pendant tout le cycle de vie JSF sur une demande ajax (obtenir les paramètres de la demande, les valider, mettre à jour le modèle, exécuter l'action). process
par défaut est @form
, le formulaire actuel et execute
par défaut _ @this
, le composant courant. Dans les liens/boutons de commande, cela est obligatoire pour exécuter les actions associées au lien/bouton lui-même.
Cependant, dans votre table de données, vous avez process="@this infoAnggaranForm:Anggaran"
, donc deux composants à traiter. Si vous omettez @this
mais conservez l'autre composant, il ne traitera/exécutera que l'autre composant et non le composant lien/bouton. Si vous omettez l'attribut process
, sa valeur par défaut sera @form
. Si vous avez d'autres composants d'entrée sous la même forme, ils seront également traités.
Selon les exigences fonctionnelles concrètes, vous pouvez simplement le garder process="@this infoAnggaranForm:Anggaran"
, ou omettez-le. JSF traitera/exécutera alors au moins le bouton et l'autre composant, exactement comme vous le souhaitez.