我尝试使用onChange
的{{1}}事件,但它不起作用,当我添加selectOneMenu
attribue时,组件不会显示。
有人可以告诉我如何处理onChange
的{{1}}事件?
以下是我的观点:
onChange
这是请求范围bean中的<p:selectOneMenu>
方法:
<p:selectOneMenu id="service" filterMatchMode="startsWith">
<f:selectItem itemLabel="Selectionner un Service : " />
<f:selectItems value="#{newOpProgramme.listeSevice}" var="service" itemValue="#{service.serviceId}" itemLabel="#{service.serviceNom}"/>
<f:ajax event="change" execute="@this" listener="#{newOpProgramme.serviceChange()}" render="nomCdp"/>
</p:selectOneMenu>
但是,当我更改菜单时,没有打印任何内容。
这是如何引起的?如何解决?
答案 0 :(得分:26)
首先,onChange
是错误的事件名称。它是change
。其次,如果您打算调用HTML属性名称,onChange
也是错误的属性名称。它是onchange
。
回到你的具体问题;标准JSF <f:ajax>
与PrimeFaces组件不兼容。您应该使用PrimeFaces自己的<p:ajax>
代替。
<p:selectOneMenu ...>
...
<p:ajax listener="#{newOpProgramme.serviceChange()}" update="nomCdp" />
</p:selectOneMenu>
请注意,我省略了event
和process
属性。它们的默认值分别为valueChange
和@this
。
答案 1 :(得分:1)
当我想在selectOneMenu中更改后更新内容时,我会在selectOneMenu中使用<f:ajax>
标记,如下所示:
<h:selectOneMenu value="#{bean.selected}" >
... select items here
<f:ajax event="change" execute="@this" render="search" />
</h:selectOneMenu>
搜索是您要更新的对象的Id
。
其他解决方案是,您应该尝试onchange
而不是onChange
。
答案 2 :(得分:-1)
<p:selectOneMenu value="#{someBean.myAttr.id}" valueChangeListener="#someBean.mySelectioMethodListener}">
<f:selectItems value="#{someBean.listAttrs}" var="item"
itemLabel="#{item.name}" itemValue="#{item.id}" />
<p:ajax process="@this" update="someElementId" />
</p:selectOneMenu>
您必须为<f:selectItems />
添加一个Id,并通过发布的ajax itemValue(id)在支持bean侧设置您的选择。
没有转换器的服务器端方法bean:
public void mySelectionMethodListener(ValueChangeEvent event) {
ApplicationContext context = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
SomeBeanDao someBeanDao = (SomeBeanDao) context.getBean(SomeBeanDao.class);
myAttr = someBeanDao.byId((Long) event.getNewValue());
System.out.println("value changed...");
}