【问题标题】:How can I use a shared error message Dialog in PrimeFaces如何在 PrimeFaces 中使用共享错误消息对话框
【发布时间】:2013-11-11 04:15:28
【问题描述】:

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

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

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

但是如果:

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

我考虑过放置一个带有特定 id 的 p:message 组件,并将其包含在每个 xhtml 页面中。但这不一定涵盖第三种情况。

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

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

您将如何管理此类通用错误消息?

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

    您可以将常见的<p:dialog><h:message> 放在一个用于所有页面的模板文件中,并给它一个唯一的ID。这样,它将为使用该模板的所有页面呈现。

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

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

    例如

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

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

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

    另见

    【讨论】:

    • 没有模板,但我不介意手动将其放入每个页面。
    • 但是这样一来,我就得把公共消息的 id 放在每个命令组件的更新中,对吧?
    • 是的,必须为 facelets 中的 update 属性传递 ID。
    • 好吧,我介意在每个 facelet 中添加该 ID。在我看来很脏。有什么办法吗?例如在 Bean/Java 端设置更新属性?
    • 是的,您也可以通过编程方式更新组件。查看我的编辑。
    【解决方案2】:

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

    根据他们的用户指南:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多