onChange
のselectOneMenu
イベントを使用しようとしましたが、機能せず、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");
}
しかし、メニューを変更しても何も印刷されません。
これはどのように発生し、どうすれば解決できますか?
まず第一に、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
の正しいデフォルト値をすでに持っています。
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
を試すことです。