删除JSF错误消息

时间:2012-08-24 08:50:22

标签: jsf-2 primefaces

我正在使用JSF 2和primefaces 3.3.1。

我在template.xhtml页面中使用了form标签,并在其中包含了我的所有页面。因此所有页面都采用相同的形式。我的方案是:我有两个面板,一个是客户搜索面板,另一个是客户搜索结果面板。客户搜索面板包含一些文本框和一个命令按钮。在那个文本框中,我将提供一些关于客户的输入,我将点击命令按钮。之后,我必须加载客户搜索结果面板,其中包含一个带搜索结果的数据表。

最初我只会加载客户搜索面板。一旦我点击命令按钮,我只会加载客户搜索面板。在我的客户搜索面板的命令按钮中,我在更新属性中给出了客户搜索结果面板ID。像

<p:commandButton value="click" action="#{bean.action}" update="cust_search_panel"/>

当我按下命令按钮时,jsf说“找不到标识符为cust_search_panel的组件”。因为最初我不会加载客户搜索结果面板,因此id不会在那里。

使用primefaces 2.2.1时没有问题,因为如果组件不在表单中,那么他们将添加信息消息“无法找到具有标识符cust_search_panel的组件”。但是在主要版本3.3.1中,他们将该信息消息更改为错误消息。所以现在我的页面因为这个错误而没有加载。

当我们收到“无法找到带有标识符cust_search_panel的组件”这样的消息时,如果可以从facescontext中删除该错误消息,那么我的页面将正确加载吗?

除此之外我还没有找到任何解决方案。任何人都可以帮我解决这个问题。

提前致谢。

3 个答案:

答案 0 :(得分:0)

我不知道任何其他简单的解决方案。但这应该有效:

从操作方法更新组件并删除按钮上的更新属性。

if (context.getViewRoot().findComponent("myForm:cust_search_panel") != null){
     RequestContext.getCurrentInstance().update("cust_search_panel");
}

答案 1 :(得分:0)

你试过

吗?
<p:commandButton value="click" action="#{bean.action}" update=":cust_search_panel"/>

答案 2 :(得分:0)

引用不存在的元素是错误的,JSF应该显示错误。如果JSF允许加载页面,则会导致JavaScript错误。

处理此问题的正确方法是引用父元素。因此,在您的情况下,您应该渲染面板并隐藏数据表。命令按钮应该更新包含数据表的面板。

示例:

<p:commandButton value="click" action="#{bean.action}" update="cust_search_panel"/>

<your-container id="cust_search_panel">
    <p:dataTable rendered="#{bean.someCondition" .../>
</your-container>