【问题标题】:<f:ajax> doesn't work on PrimeFaces component<f:ajax> 不适用于 PrimeFaces 组件
【发布时间】:2013-08-22 04:08:36
【问题描述】:

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

谁能告诉我如何处理&lt;p:selectOneMenu&gt;onChange 事件?

这是我的看法:

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

这是请求范围 bean 中的 &lt;f:ajax listener&gt; 方法:

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

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

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

【问题讨论】:

  • 1.发布您的代码; 2. 你必须使用属性onchangeselectOneMenu 没有 onChange 属性。

标签: ajax jsf events primefaces


【解决方案1】:

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

回到你的具体问题;标准 JSF &lt;f:ajax&gt; 与 PrimeFaces 组件不兼容。您应该改用 PrimeFaces 自己的 &lt;p:ajax&gt;

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

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

另见:

【讨论】:

    【解决方案2】:

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

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

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

    其他解决方案是您应该尝试onchange 而不是onChange

    【讨论】:

    • 感谢您的回答,但是如何从 managedBean 调用函数?
    • 您可以使用 f:ajax 的 listener 属性。 &lt;f:ajax event="change" execute="@this" render="search" listener="#{bean.method()}"/&gt;
    • 所以发布你的代码。我不知道如何解决这个问题,没有细节。
    • 是的,如果您使用的是 primefaces selectOneMenu,请使用带有 p:ajax 的 BalusC 解决方案,但 f:ajax 除外。
    【解决方案3】:
    <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>
    

    您必须为&lt;f:selectItems /&gt; 设置一个 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...");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2012-06-11
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      相关资源
      最近更新 更多