web-dev-qa-db-ja.com

@thisの機能は正確に何ですか?

私の知る限り、@ 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を省略すると、setPropertyActionListeneractionは、存在しないかのように実行されることはありません。

なぜだろうか?おそらく@ 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>
34
bertie

PrimeFaces process属性と標準JSF execute属性は、JSFがajaxリクエスト(リクエストパラメータの取得、検証、モデルの更新、アクションを実行します)。 processのデフォルトは@form(現在のフォーム)であり、executeのデフォルトは@this(現在のコンポーネント)です。コマンドリンク/ボタンでは、リンク/ボタン自体に関連付けられたアクションを実行するために必須です。

ただし、データテーブルにはprocess="@this infoAnggaranForm:Anggaran"があるため、2つのコンポーネントを処理する必要があります。 @thisを省略し、他のコンポーネントを保持する場合、リンク/ボタンコンポーネントではなく、他のコンポーネントのみを処理/実行します。 process属性を省略すると、デフォルトで@formになります。同じフォームに他の入力コンポーネントがある場合は、それらも処理されます。

具体的な機能要件に応じて、process="@this infoAnggaranForm:Anggaran"のままにするか、省略することができます。 JSFは、必要に応じて、少なくともボタンと他のコンポーネントの両方を処理/実行します。

こちらもご覧ください:

37
BalusC