p:selectOneMenu ajax不会在p:dataGrid中触发

时间:2013-08-09 14:51:02

标签: ajax jsf primefaces

我为dataGrid的每一行都渲染了一个selectOneMenu。问题是当选择改变时不调用ajax监听器的方法。

如果我在dataGrid之外使用相同的selectOneMenu,它可以正常工作。 p:selectBooleanCheckbox会发生相同的行为。

XHTML页面:

<h:form id="form2">
  <p:dataGrid id="gridC" widgetVar="gridC" 
    value="#{myBean.comp}" var="site" columns="1" rowIndexVar="siteIndex">
    <p:column>
      <h:outputText value="#{site.sito}" />
    </p:column>
    <p:column>
      <p:selectOneMenu id="stato" value="#{site.stateId}" 
        required="true">
        <p:ajax update="@form :tabView:frm_buttons" global="false" 
          listener="#{myBean.testChangeState}" />
        <f:selectItems value="#{myBean.siteStates}" var="s"
          itemLabel="#{s.state}" itemValue="#{s.stateId}" />
      </p:selectOneMenu>
    </p:column>
  </p:dataGrid>
</h:form>

管理bean:

@ManagedBean
@ViewScoped
public class MyBean implements Serializable {
  private SiteState siteStates;
  private Comp comp;
  // getters and setters...

  public void testChangeState() {
    System.out.println("Test change state fired.");
  }
}

SiteState bean:

public class SiteState implements Serializable {
  private String state;
  private String stateId;
  // getters and setters...
}

1 个答案:

答案 0 :(得分:0)

找到了秘密。

数据网格位于手风琴面板的标签内,我使用了这样的ID:

<p:tab id="sito#{sito.idSitoStoccaggio}"

情况并非如此,因为它会在某些情况下产生奇怪的行为,例如,不会从数据网格中触发的事件。

切换到:

<p:tab id="sito"

解决了我的问题。