p:selectOneMenu第一个ajax请求问题

问题描述 投票:2回答:2

[当我尝试通过更改SelectOneMenu的值来更新p:dataGrid时,PrimeFaces p:selectOneMenu组件出现问题。

Xhtml:

<p:selectOneMenu value="#{bussinessOwnersViewerMB.selectedCity}" effect="explode">
  <f:selectItems value="#{bussinessOwnersViewerMB.cities}" var="city" itemLabel="#{city.cityName}" itemValue="#{city.cityId}"/>  
  <p:ajax listener="#{bussinessOwnersViewerMB.handleCityChange}" update="mainform:bolist"/>
</p:selectOneMenu>

<p:dataGrid id="bolist" var="bo" value="#{bussinessOwnersViewerMB.bOwners}" columns="3" rows="#{bussinessOwnersViewerMB.os}">
  <p:column>
    <p:panel header="#{bo.bOName}">
      <h:panelGrid columns="1">
        <p:graphicImage value="/resources/images/#{bo.boType}/#{bo.bOId}/mainProfile.jpg"/>
      </h:panelGrid>
    </p:panel>
  </p:column>
</p:dataGrid>

问题是,当我第一次更改selectOneMenu的值时,数据网格未得到更新。发生的情况是仅调用了postconstructor方法,在第一次更改后它可以正常工作。

我的托管Bean是一个范围广泛的托管Bean。

侦听器方法“ bussinessOwnersViewerMB.handleCityChange”是:

public void handleCityChange(ValueChangeEvent event) {  
  bOwners = bovb.loadAllDistributerByType(new Integer(selectedCity)); // selectedcity is the selected item id 
  os = Integer.toString(bOwners.size());
}
jsf-2 primefaces
2个回答
0
投票

过去,您无法像这样更新dataGrid;您必须将其包装在panelGroup中。我不知道是否已经改变,但是我仍然那样做并且仍然有效。因此,只需将您的dataGrid放在panelGroup内,然后更新ajax标记中的panelGroup(而不是dataGrid)。


0
投票

当然,对于下一个用户,您可以尝试使用此p:ajax属性:

immediate="true"

所以您应该有:

<p:selectOneMenu value="#{bussinessOwnersViewerMB.selectedCity}" effect="explode">
  <f:selectItems value="#{bussinessOwnersViewerMB.cities}" var="city"
         itemLabel="#{city.cityName}" itemValue="#{city.cityId}"/>  
  <p:ajax immediate="true" listener="#{bussinessOwnersViewerMB.handleCityChange}" 
         update="mainform:bolist"/>
</p:selectOneMenu>

作为侦听器方法,您可以使用此:

public void handleCityChange(final AjaxBehaviorEvent e) {
    //TODO: Your code here
    //For example: String newValue = (String)((UIInput)e.getSource()).getSubmittedValue();
}

其他参考资料在这里:

© www.soinside.com 2019 - 2024. All rights reserved.