0

我正在使用带有 primefaces 3.3.1 的 JSF 2。

我在我的 template.xhtml 页面中使用了表单标签,并将我的所有页面都包含在其中。所以所有页面都在同一个表单下。我的场景是:我有两个面板,一个是客户搜索面板,另一个是客户搜索结果面板。客户搜索面板包含一些文本框和一个命令按钮。在该文本框中,我将提供有关客户的一些输入,然后单击命令按钮。之后,我必须加载包含一个带有搜索结果的数据表的客户搜索结果面板。

最初我将只加载客户搜索面板。单击命令按钮后,只有我会加载客户搜索面板。在我的客户搜索面板的那个命令按钮中,我在更新属性中给出了客户搜索结果面板的 ID。像

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

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

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

当我们收到诸如“找不到标识符为 cust_search_panel 的组件”之类的消息时,如果可以从 facescontext 中删除该错误消息,那么我的页面将正确加载吗?

除了这个,我还没有找到任何解决方案。谁能帮我解决这个问题。

提前致谢。

4

3 回答 3

0

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

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

if (context.getViewRoot().findComponent("myForm:cust_search_panel") != null){
     RequestContext.getCurrentInstance().update("cust_search_panel");
}
于 2012-08-24T12:41:27.047 回答
0

你试过吗

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

?

于 2012-08-24T12:43:40.937 回答
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>
于 2012-08-25T11:15:33.740 回答