【发布时间】: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