私の知る限り、@ thisは、次のようなイベントをトリガーする現在のコンポーネントを示すことです。
<p:commandButton process="@this" ... />
また、JSF 2 Ajaxでは、@ thisはカプセル化コンポーネントを意味する場合もあります。
<h:inputText ...>
<f:ajax execute="@this" ... />
</h:inputText>
そして、p:datatableを使用して@ thisを含めたり除外したりすると、Ajax部分送信に異なる影響を与える可能性がある場合があります
以下に例を示します。この場合、プロセスは@ thisを使用しており、プロセスが最初に発生し、その後にsetPropertyActionListenerが続き、最後に、 アクションが実行されます:
<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>
しかし、この例から@ thisを省略すると、setPropertyActionListenerとactionは、存在しないかのように実行されることはありません。
なぜだろうか?おそらく@ thisには、現在のコンポーネント(この例では現在のレコード)以外の意味がありますか?
私はTomcat 7を使用していますが、これらは私の依存関係です:
<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>
PrimeFaces process
属性と標準JSF execute
属性は、JSFがajaxリクエスト(リクエストパラメータの取得、検証、モデルの更新、アクションを実行します)。 process
のデフォルトは@form
(現在のフォーム)であり、execute
のデフォルトは@this
(現在のコンポーネント)です。コマンドリンク/ボタンでは、リンク/ボタン自体に関連付けられたアクションを実行するために必須です。
ただし、データテーブルにはprocess="@this infoAnggaranForm:Anggaran"
があるため、2つのコンポーネントを処理する必要があります。 @this
を省略し、他のコンポーネントを保持する場合、リンク/ボタンコンポーネントではなく、他のコンポーネントのみを処理/実行します。 process
属性を省略すると、デフォルトで@form
になります。同じフォームに他の入力コンポーネントがある場合は、それらも処理されます。
具体的な機能要件に応じて、process="@this infoAnggaranForm:Anggaran"
のままにするか、省略することができます。 JSFは、必要に応じて、少なくともボタンと他のコンポーネントの両方を処理/実行します。