Primefaces valueChangeListener 或 <p:ajax 侦听器不会为 p:selectOneMenu 触发 [英] Primefaces valueChangeListener or <p:ajax listener not firing for p:selectOneMenu
问题描述
我使用的是 Primefaces 3.4.2.
I am using Primefaces 3.4.2.
我的 JSF 页面中有以下内容
I have the following in my JSF page
<p:selectOneMenu id="emp" value="#{mymb.emp.employeeName}"
valueChangeListener="#{mymb.handleChange}"
required="true"
style="width: 150px;">
<f:selectItem noSelectionOption="true"
itemLabel="Please Select"/>
<f:selectItems value="#{mymb.employeeList}" var="emp"
itemLabel="#{emp.employeeName}"
itemValue="#{emp.employeeNumber}"/>
<p:ajax update="sublist"/>
</p:selectOneMenu>
在 ManagedBean 中
and in ManagedBean
public void handleChange(ValueChangeEvent event){
System.out.println("here "+event.getNewValue());
}
问题是 valueChangeListener
没有触发,即没有调用 handleChange
方法.我尝试了以下方法,但它也不起作用.
The problem is valueChangeListener
is not firing, i.e. handleChange
method is not getting invoked. I tried with the following, but it is not working either.
<p:ajax update="sublist" listener="#{mymb.handleChange}" />
单独的 JSF 页面:
Separate JSF page:
<ui:composition template="/templates/layout.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<ui:define name="content">
<h:head>
</h:head>
<h:body>
<h:form id="form">
<p:panelGrid columns="6">
<h:outputLabel value="Employees" for="employees" />
<p:selectOneMenu id="employees"
value="#{mymb.employeesList}"
required="true">
<f:selectItems value="#{mymb.employeesList}" var="emp"
itemLabel="#{emp.employeeName}" />
<p:ajax listener="#{mymb.handleChange}" />
</p:selectOneMenu>
</p:panelGrid>
</h:form>
</h:body>
</ui:define>
</ui:composition>
推荐答案
如果要使用valueChangeListener
,则每次选择新选项时都需要提交表单.像这样:
If you want to use valueChangeListener
, you need to submit the form every time a new option is chosen. Something like this:
<p:selectOneMenu value="#{mymb.employee}" onchange="submit()"
valueChangeListener="#{mymb.handleChange}" >
<f:selectItems value="#{mymb.employeesList}" var="emp"
itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeID}" />
</p:selectOneMenu>
public void handleChange(ValueChangeEvent event){
System.out.println("New value: " + event.getNewValue());
}
否则,如果你想使用
,它应该是这样的:
Or else, if you want to use <p:ajax>
, it should look like this:
<p:selectOneMenu value="#{mymb.employee}" >
<p:ajax listener="#{mymb.handleChange}" />
<f:selectItems value="#{mymb.employeesList}" var="emp"
itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeID}" />
</p:selectOneMenu>
private String employeeID;
public void handleChange(){
System.out.println("New value: " + employee);
}
需要注意的一点是,在您的示例代码中,我看到您的
的 value
属性是 #{mymb.employeeList}
与
的 value
相同.您的
的 value
应该类似于我上面的示例,指向单个员工,而不是员工列表.
One thing to note is that in your example code, I saw that the value
attribute of your <p:selectOneMenu>
is #{mymb.employeesList}
which is the same as the value
of <f:selectItems>
. The value
of your <p:selectOneMenu>
should be similar to my examples above which point to a single employee, not a list of employees.
这篇关于Primefaces valueChangeListener 或 <p:ajax 侦听器不会为 p:selectOneMenu 触发的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!