<f:ajax>不适用于PrimeFaces组件</f:ajax>

时间:2013-08-20 07:36:44

标签: ajax jsf events primefaces

我尝试使用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>

但是,当我更改菜单时,没有打印任何内容。

这是如何引起的?如何解决?

3 个答案:

答案 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>

请注意,我省略了eventprocess属性。它们的默认值分别为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...");
}