MyFaces 1.1 を使用しています。<h:selectOneMenu>
それぞれが同じvalueChangeListener
メソッドを指す2 つの s ドロップダウンがあります。
<h:selectOneMenu id="d1" value="#{mybean.selectedChannel1}"
onchange="submit()" valueChangeListener="#{myform.channelValuechange}">
<f:selectItems value="#{mybean.channelList}"/>
</h:selectOneMenu>
<h:selectOneMenu id="d2" value="#{mybean.selectedChannel2}"
onchange="submit()" valueChangeListener="#{myform.channelValuechange}">
<f:selectItems value="#{mybean.channelList}"/>
</h:selectOneMenu>
最初のドロップダウンを変更すると、値変更リスナー メソッドが正しく起動されます。sourceId
このメソッドでは、引数を介して現在のコンポーネントの ID を取得し、ValueChangeEvent
次のように比較しています。
if (sourceId.equals("d1")) {
// ...
} else if (sourceId.equals("d2")) {
// ...
}
ただし、私の具体的な問題は、が変更さd2
れたときにブロックも呼び出されることです。d1
私は1つと他のものを試してみましたが、次のことが問題の解決に役立つと考えました:
if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
event.setPhaseId(PhaseId.INVOKE_APPLICATION);
event.queue();
}
しかし、それが最善の解決策であるとは思えません。これはどのように発生し、上記のコードを使用せずにどのように解決できますか?