gpt4 book ai didi

java - Primefaces 不会在 AJAX 更新时渲染子组件

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:14 25 4
gpt4 key购买 nike

我目前正在使用 Primefaces 5.0 开发 JSF 应用程序,其中面板的内容应根据当前的 SelectOneMenu 选择动态更新。
当所选项目发生更改时,将调用一个 Java 方法,该方法通过 ID 搜索面板,删除所有当前的子组件并用新的子组件替换它们。
这一切都正常工作:调用该方法,通过其 ID 找到面板,并替换子组件。但由于某种原因,子部件永远不会显示在用户界面上。我检查了 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());
}
}

最佳答案

用 JSF 的内置 HTMLPanelGrid 替换 PrimeFace 的 PanelGrid 可以解决该问题。

关于java - Primefaces 不会在 AJAX 更新时渲染子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24389499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com