从对话框中按绝对id更新primefaces tabView

时间:2015-05-06 09:10:44

标签: jsf jsf-2 primefaces jsf-2.2

我有一个典型的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更新方法失败了。 我是否可以影响主要方面如何检查ID?

由于 奥利弗

0 个答案:

没有答案