簡體   English   中英

Primefaces不會在AJAX更新上呈現子組件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM