2

SelectOneMenuの値を変更してap: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());
}
4

2 に答える 2

0

以前は、そのように dataGrid を更新することはできませんでした。panelGroup でラップする必要がありました。それが変わったかどうかはわかりませんが、今でもそうしていますし、今でも機能しています。したがって、dataGrid を panelGroup 内に配置し、ajax タグで (dataGrid の代わりに) panelGroup を更新するだけです。

于 2012-07-24T12:31:15.097 に答える