[英]Primefaces does not render child components on AJAX update
我目前正在使用Primefaces 5.0開發JSF應用程序,其中面板的內容應根據當前的SelectOneMenu選擇動態更新。
當所選項目更改時,將調用Java方法,該方法通過其ID搜索面板,刪除所有當前的子組件並將其替換為新的子組件。
這一切都正常工作:調用該方法,通過其ID查找面板,並替換子組件。 但是出於某種原因,子窗口小部件從不顯示在UI上。 我已經檢查了HTTP響應,它們也在那里丟失了。
有任何想法嗎?
JSF代碼如下所示:
<p:panel>
<p:selectOneMenu id="artikelFilter" value="#{artikelListController.artikelFilter}" converter="omnifaces.SelectItemsConverter">
<p:ajax event="change" update="createFilterPanel" />
<f:selectItem itemLabel="" itemValue="#{null}" />
<f:selectItems value="#{artikelListController.artikelFilterValues}" />
</p:selectOneMenu>
<p:panelGrid id="createFilterPanel" />
<p:commandButton action="#{artikelListController.addArtikelFilter()}" value="Hinzufügen" disabled="#{artikelListController.artikelFilter == null}" style="margin-left: 15px" />
</p:panel>
和這樣的Java代碼:
public void setArtikelFilter(final Class<? extends ArtikelFilter> clazz) {
PanelGrid createFilterWidget = (PanelGrid) FacesContext.getCurrentInstance().getViewRoot().findComponent("artikelListForm:createFilterPanel");
if (clazz == null) {
artikelFilter = null;
createFilterWidget.getChildren().clear();
}
else if (artikelFilter == null || clazz != artikelFilter.getClass()) {
artikelFilter = constructor().in(clazz).newInstance();
createFilterWidget.getChildren().clear();
createFilterWidget.getChildren().addAll(artikelFilter.getCreateFilterWidgets());
}
}
更換PrimeFace的PanelGrid
與JSF的內置HTMLPanelGrid
解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.