web-dev-qa-db-ja.com

<f:ajax>はPrimeFacesコンポーネントでは機能しません

onChangeselectOneMenuイベントを使用しようとしましたが、機能せず、onChange属性を追加するとコンポーネントが表示されません。

誰かが<p:selectOneMenu>onChangeイベントを処理する方法を教えてもらえますか?

これが私の見解です:

<p:selectOneMenu id="service" filterMatchMode="startsWith">  
    <f:selectItem itemLabel="Selectionner un Service : "  />  
    <f:selectItems value="#{newOpProgramme.listeSevice}" var="service" itemValue="#{service.serviceId}" itemLabel="#{service.serviceNom}"/>
    <f:ajax event="change" execute="@this" listener="#{newOpProgramme.serviceChange()}" render="nomCdp"/>
</p:selectOneMenu>

そして、リクエストスコープのBeanの<f:ajax listener>メソッドは次のとおりです。

public void serviceChange() {
    System.out.println("change");
}

しかし、メニューを変更しても何も印刷されません。

これはどのように発生し、どうすれば解決できますか?

6
watou

まず第一に、onChangeは間違ったイベント名です。 changeです。次に、HTML属性名を呼び出す場合、onChangeも間違った属性名です。 onchangeです。

具体的な問題に戻ります。標準のJSF<f:ajax>はPrimeFacesコンポーネントと互換性がありません。代わりに、PrimeFaces独自の <p:ajax> を使用する必要があります。

<p:selectOneMenu ...>
    ...
    <p:ajax listener="#{newOpProgramme.serviceChange()}" update="nomCdp" />
</p:selectOneMenu>

event属性とprocess属性を省略したことに注意してください。どちらも、それぞれvalueChange@thisの正しいデフォルト値をすでに持っています。

参照:

26
BalusC

SelectOneMenuの変更後に何かを更新したい場合は、selectOneMenu内で次のように<f:ajax>タグを使用します。

  <h:selectOneMenu value="#{bean.selected}" >
... select items here
     <f:ajax event="change" execute="@this" render="search" />
  </h:selectOneMenu>

ここで、searchは、更新するオブジェクトのIdです。

他の解決策は、onchangeではなくonChangeを試すことです。

1
michalorlik