我为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...
}
答案 0 :(得分:0)
找到了秘密。
数据网格位于手风琴面板的标签内,我使用了这样的ID:
<p:tab id="sito#{sito.idSitoStoccaggio}"
情况并非如此,因为它会在某些情况下产生奇怪的行为,例如,不会从数据网格中触发的事件。
切换到:
<p:tab id="sito"
解决了我的问题。