Java Primefaces不会在AJAX更新上渲染子组件

Java Primefaces不会在AJAX更新上渲染子组件,java,ajax,jsf,primefaces,Java,Ajax,Jsf,Primefaces,我目前正在使用Primefaces 5.0开发一个JSF应用程序,其中面板的内容应该根据当前的SelectOneMenu选择动态更新。 当所选项目发生更改时,将调用一个Java方法,该方法按面板ID搜索面板,删除所有当前子组件并用新组件替换它们。 这一切都正常工作:调用该方法,通过其ID找到面板,并替换子组件。但由于某些原因,子窗口小部件从未出现在UI上。我已经检查了HTTP响应,它们也不在那里。 有什么想法吗 JSF代码如下所示: <p:panel> <p:selec

我目前正在使用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>
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());
    }
}

Java代码如下所示:

<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>
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());
    }
}

public void setArtikelFilter(final Class用JSF的内置
HTMLPanelGrid
替换PrimeFace的
PanelGrid
解决了这个问题