0

リスナーを持つap:ajaxを持つ複数の入力フィールドがあります。それらはすべて同じリスナーに接続します。どのコンポーネントがリスナーをトリガーしたかをどのように知ることができますか?

<h:inputText id="postalCode" size="20" value="# businessPartner.primaryAddress.postalCode}" 
<p:ajax event="change" listener="#{businessPartner.primaryAddress.retrievePostalCodeCity}"  >
</p:ajax>  
</h:inputText>

<h:inputText id="city" size="60" value="# businessPartner.primaryAddress.city}" 
<p:ajax event="change" listener="#{businessPartner.primaryAddress.retrievePostalCodeCity}"  >
</p:ajax>  
</h:inputText>



public void retrievePostalCodeCity() throws MWSException {
    int country = address.getCountryId();
    String postalCode = address.getPostalCode();
    String city = address.getCity();
}

以前はa4jajaxを使用していたため、この問題が発生しましたが、プロジェクトを完全にプライムフェイスに移動し、リッチフェイスではなくなりました。a4jのリスナーにはAjaxBehaviorEventイベントがあり、そこでevent.getComponent()。getId()を実行できます。

プライムajaxで同じことをするにはどうすればよいですか?

4

2 に答える 2

2

これAjaxBehaviorEventはRichFacesに固有のものではありません。これはJSF2自体に固有です。したがって、PrimeFacesで引き続き使用できます。

public void retrievePostalCodeCity(AjaxBehaviorEvent event) {
    UIComponent component = event.getComponent();
    // ...
}

別の方法として、または他の場所では実際に不可能な場合は、常に新しいJSF2UIComponent#getCurrentComponent()メソッドを使用できます。

public void retrievePostalCodeCity() {
    UIComponent component = UIComponent.getCurrentComponent(FacesContext.getCurrentInstance());
    // ...
}

ちなみに、まったく同じ構成がJSF2自体で問題なく機能するはず<f:ajax>です。ここで使用する理由はわかりません<p:ajax>。ただし、実際になどのPrimeFacesコンポーネントを使用している場合は、これが唯一の方法です<p:inputText>


具体的な問題とは関係なく、これevent="change"はすでにデフォルトです。省略できます。

于 2012-11-23T11:37:51.540 に答える
-2

これは、primefacesでもほぼ同じです。

 <p:ajax event="change" listener="#{businessPartner.primaryAddress.retrievePostalCodeCity}"  />


import javax.faces.event.AjaxBehaviorEvent;
.....
public void retrievePostalCodeCity(AjaxBehaviorEvent event) {
...
}

ボタンコンポーネントのaction/actionListenerタグを介してアクセスする場合はActionEvent、使用できます。どのような場合でも、ajax="true"を設定してください。

<p:commandLink actionListener="#{businessPartner.primaryAddress.retrievePostalCodeCity}" ajax="true" />

import javax.faces.event.ActionEvent;

....

public void retrievePostalCodeCity(ActionEvent event) {
    ...
    }
于 2012-11-23T11:43:57.113 に答える