3

在 PrimeFaces 中,当您想要显示错误消息时,您可以:

  1. 在视图中创建一个调用动作的命令组件
  2. 在“更新”属性中,您设置将显示消息的 p:message 或 p:growl 组件的 id
  3. 在支持 Bean 中,在 action 函数中你抛出一条消息

结果,错误消息将显示在重定向页面中,在具有匹配 id 的消息组件中

但是如果:

  1. 您想在另一个页面中显示该消息,该页面不包含调用该操作的命令组件。
  2. 该操作可以重定向到许多不同的页面,具体取决于一些支持 bean 逻辑。
  3. 该动作不是从命令组件调用的,至少不是直接调用的

我曾想过将 ap:message 组件与特定的 id 放在一起,并将其包含在每个 xhtml 页面中。但这不一定涵盖第三种情况。

例如,可能有一个检查与另一个 Web 服务的连接的函数。许多不同的操作可能会引发连接错误。

  • 或会话到期
  • 或拒绝许可

您将如何管理这种通用错误消息?

4

2 回答 2

2

您可以将通用文件<p:dialog>或模板文件放入<h:message>所有页面使用的模板文件中,并为其指定一个唯一的 ID。这样,它将为使用该模板的所有页面呈现。

这是假设您使用的是模板。

更新:如果您希望以编程方式更新组件,可以使用RequestContext#update()

例如

if (someErrorCondition) {
    RequestContext.getCurrentInstance().update("errorDialogId");
}

其中errorDialogId是常见错误对话框的 ID。

如果您打算使用此方法,则需要update从命令组件中删除该属性。

也可以看看

于 2013-10-31T08:55:37.047 回答
0

为什么不使用RequestContext#showMessageInDialog(FacesMessage)

根据他们的用户指南:

在对话框中显示 FacesMessages 是一种常见的情况,首先需要将 facesmessage 添加到上下文中,需要更新包含消息组件的对话框内容,最后使用客户端 api 显示对话框。DF(对话框架)有一个简单的实用程序,可以通过提供快捷方式绕过此过程;

使用它,您无需在您拥有的每个页面中添加额外的代码。只需将其添加到您的豆子中即可。

于 2016-11-07T05:50:15.770 回答