好的我有一个简单的菜单,我称之为听众
<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事件,但它只适用于图表组件!
提前致谢
答案 0 :(得分:1)
由于您已使用PrimeFaces,因此请使用p:ajax
代替f:ajax
。 event
已设置为相应的事件(valueChanged)。
要检测selectManyMenu
value
属性的选定值是必要的:
<p:selectManyMenu style="width: 100%;" id="cmbsectores"
value="#{mbcompletado.selectedSectores}">
<f:selectItems value="#{mbcompletado.sectores}"/>
<p:ajax/>
</p:selectManyMenu>
您可以完全删除valueChangeListener侦听器。
有关更完整的示例,请参阅SelectManyMenu。
修改强>
在您的支持bean中mbcompletado.selectedSectores
应该指向与mbcompletado.sectores
相同类型的集合。例如,如果您的sectores
是List
TypeA
,selectedSectores
也应该是同一类型的List
(TypeA
)。
类似的backing-bean结构可以在以下示例SelectManyCheckbox中找到。
答案 1 :(得分:0)
您需要<f:ajax listener>
(或在此情况下更好<p:ajax listener>
)方法。 ValueChangeListener
用于完全不同的目的,只有当您真正对两者旧值和新值感兴趣时才会使用,而不是在您只对新值感兴趣时。< / p>
E.g。
<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.
// ...
}