我正在使用 MyFaces 1.1。我有两个<h:selectOneMenu>
下拉菜单,每个下拉菜单都指向相同的valueChangeListener
方法。
<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
通过ValueChangeEvent
参数获取当前组件的 ID,然后进行如下比较:
if (sourceId.equals("d1")) {
// ...
} else if (sourceId.equals("d2")) {
// ...
}
但是,我的具体问题是在更改d2
时也会调用块。d1
我尝试了一个和另一个,并认为以下有助于解决问题:
if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
event.setPhaseId(PhaseId.INVOKE_APPLICATION);
event.queue();
}
但是,我不认为这是最好的解决方案。这是如何引起的,如果不使用上述代码,我该如何解决?