好的,我有一个简单的菜单,我称之为听众
<p:selectManyMenu style="width: 100%;" id="cmbsectores" valueChangeListener="#{mbcompletado.removeItem}">
<f:selectItems value="#{mbcompletado.sectores}"/>
<f:ajax update="@this"/>
</p:selectManyMenu>
我正在寻找如何使用 ValueChangeEvent 传递作为参数来检测选择了哪个项目?所以我可以使用我的业务逻辑!
我需要使用 ajax 标记吗?我在我正在使用的框架 primeface 中找到了一个 itemSelect 事件,但它仅适用于图表组件!
提前致谢
由于您已经在使用 PrimeFaces,请使用 p:ajax
而不是 f:ajax
。event
已设置为相应的事件 (值已更改)。
要检测selectManyMenu
的选定值,必须value
属性:
<p:selectManyMenu style="width: 100%;" id="cmbsectores"
value="#{mbcompletado.selectedSectores}">
<f:selectItems value="#{mbcompletado.sectores}"/>
<p:ajax/>
</p:selectManyMenu>
您可以完全删除 valueChangeListener 侦听器。
有关更完整的示例,请参阅选择多个菜单。
编辑:
在您的后备 bean 中,mbcompletado.selectedSectores
应该指向与您的 mbcompletado.sectores
相同类型的集合。例如,如果你的sectores
是TypeA
的List
,selectedSectores
也应该是相同类型的List
(TypeA
)。
类似的背靠 Bean 结构可以在以下示例 SelectManyCheckbox 中找到。
您需要<f:ajax listener>
(或在这种情况下更好的<p:ajax listener>
)方法。ValueChangeListener
用于完全不同的目的,仅当您对旧值和新值都真正感兴趣时才应使用,而不是仅当您只对新值感兴趣时。
例如
<p:selectManyMenu value="#{bean.selectedSectors>
<f:selectItems value="#{bean.availableSectors}"/>
<p:ajax listener="#{bean.selectedSectorsChanged}" />
</p:selectManyMenu>
跟
private List<String> selectedSectors;
private List<String> availableSectors;
public void selectedSectorsChanged() {
System.out.println("Selected sectors are: " + selectedSectors); // Look, JSF has already set it.
// ...
}
另请参阅:
- 何时使用 valueChangeListener 或 f:ajax listener?