【问题标题】:Primefaces does not render child components on AJAX updatePrimefaces 不会在 AJAX 更新时呈现子组件
【发布时间】:2014-06-24 14:39:08
【问题描述】:

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

【问题讨论】:

    标签: java ajax jsf primefaces


    【解决方案1】:

    将 PrimeFace 的 PanelGrid 替换为 JSF 的内置 HTMLPanelGrid 即可解决问题。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 2020-06-27
      • 2021-07-10
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 2016-09-20
      • 2020-09-14
      • 1970-01-01
      相关资源
      最近更新 更多