Java Primefaces不会在AJAX更新上渲染子组件
我目前正在使用Primefaces 5.0开发一个JSF应用程序,其中面板的内容应该根据当前的SelectOneMenu选择动态更新。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
当所选项目发生更改时,将调用一个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
解决了这个问题