我有一个典型的CRUD示例:用户从dataTable中选择一个项目,打开一个对话框并显示一个用于编辑项目的表单 . 保存后我想更新包含dataTable的tabView . 不幸的是,这并不是我预期的那么容易 . 主UI之后,对话框包含在正文中 . 调用UI开始页面时,不会显示tabView和对话框 . 正是在这一刻,我得到了一个关于unknwon id的例外:

10:53:58,877 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-/0.0.0.0:9090-3) Error Rendering View[/views/main.xhtml]: javax.faces.FacesException: Cannot find component with expression ":searchInstancesFormId:listResultTabViewId" referenced from "editPropertyFormId:j_idt101".
at org.primefaces.expression.SearchExpressionFacade.resolveComponentInternal(SearchExpressionFacade.java:422) [primefaces-5.1.17.jar:5.1.17]
at org.primefaces.expression.SearchExpressionFacade.resolveComponentForClient(SearchExpressionFacade.java:200) [primefaces-5.1.17.jar:5.1.17]
at org.primefaces.expression.SearchExpressionFacade.resolveComponentsForClient(SearchExpressionFacade.java:147) [primefaces-5.1.17.jar:5.1.17]
at org.primefaces.util.AjaxRequestBuilder.addExpressions(AjaxRequestBuilder.java:92) [primefaces-5.1.17.jar:5.1.17]
at org.primefaces.util.AjaxRequestBuilder.update(AjaxRequestBuilder.java:85) [primefaces-5.1.17.jar:5.1.17]
at org.primefaces.renderkit.CoreRenderer.buildAjaxRequest(CoreRenderer.java:356) [primefaces-5.1.17.jar:5.1.17]
at org.primefaces.component.commandbutton.CommandButtonRenderer.buildRequest(CommandButtonRenderer.java:123) [primefaces-5.1.17.jar:5.1.17]
at org.primefaces.component.commandbutton.CommandButtonRenderer.encodeMarkup(CommandButtonRenderer.java:65) [primefaces-5.1.17.jar:5.1.17]

那么有没有检查不可见组件的ID? tabView的id是

<div id="searchInstancesFormId:listResultTabViewId" class="ui-tabs ui-widget ui-widget-content ui-corner-all ui-hidden-container ui-tabs-top resultViewTabView"

我尝试用它来更新它

<p:commandButton value="Save" action="#{editPropertyBL.save()}" update=":searchInstancesFormId:listResultTabViewId" resetValues="true" />

如果我使用后台bean保存方法更新组件

RequestContext.getCurrentInstance().update("searchInstancesFormId:listResultTabViewId");

有用 . 我不是静态方法的粉丝,这对单元测试来说不太舒服,所以我想知道为什么纯xhtml更新方法失败了 . 我是否可以影响Primefaces如何检查ID?

谢谢奥利弗