6

我尝试使用 的onChange事件selectOneMenu,但它不起作用,并且当我添加onChange属性时组件不显示。

有人可以告诉我如何处理onChange事件 <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>

这是<f:ajax listener>请求范围 bean 中的方法:

public void serviceChange() {
    System.out.println("change");
}

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

这是如何引起的,我该如何解决?

4

3 回答 3

26

首先,onChange是错误的事件名称。是change。其次,如果你打算调用HTML的属性名,onChange也是错误的属性名。是onchange

回到你的具体问题;标准的 JSF<f:ajax>与 PrimeFaces 组件不兼容。您应该改用 PrimeFaces own <p:ajax>

<p:selectOneMenu ...>
    ...
    <p:ajax listener="#{newOpProgramme.serviceChange()}" update="nomCdp" />
</p:selectOneMenu>

请注意,我省略了eventprocess属性。它们都已经分别具有正确的默认值valueChange@this

也可以看看:

于 2013-08-20T12:05:56.903 回答
1

当我想在 selectOneMenu 更改后更新某些内容时,我在 selectOneMenu 中使用<f:ajax>标签,如下所示:

  <h:selectOneMenu value="#{bean.selected}" >
... select items here
     <f:ajax event="change" execute="@this" render="search" />
  </h:selectOneMenu>

其中 search 是Id您要更新的对象。

其他解决方案是您应该尽量onchange不要onChange

于 2013-08-20T08:32:30.183 回答
-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 />通过发布的 ajax itemValue (id) 为支持 bean 放置一个 ID 并设置您的选择。

没有转换器的服务器端方法 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...");
}
于 2013-12-09T18:32:55.510 回答