【问题标题】:Passing a FacesMessage to the next page [duplicate]将 FacesMessage 传递到下一页 [重复]
【发布时间】:2012-09-18 16:50:00
【问题描述】:

我正在寻找一种优雅的 JSF 方式来执行此操作,并且想知道是否有任何普遍接受的做法来执行此操作。

当我从一个页面导航到另一个页面时,我希望新页面在 h:message 组件中显示 FacesMessage(实际上是 p:message 但应该是相同的东西)从最后一页传输。

例如,如果用户单击“创建文档”按钮,它会在成功时导航到新页面,并在新页面上显示成功消息。我希望我所有的数据库更改操作都以这种方式运行。

似乎 FacesContext 清除了导航上的所有消息,所以我最接近的解决方案如下所示:

  1. 将 FacesMessage 对象存储在会话 bean 中。
  2. 在消息 bean 中创建一个方法 checkMessage,该方法调用 FacesContext.getCurrentInstance().addMessage(..) 并从消息 bean 中删除消息。
  3. 在目标页面中添加对 checkMessage 的 EL 引用。
  4. 在目标页面中放置一个p:message

这似乎有点强迫 - 有没有更好的方法?

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    Faces 消息确实是请求范围的。

    只需使用新的 JSF 2.0 Flash 范围:Flash#setKeepMessages():

    context.addMessage(clientId, message);
    context.getExternalContext().getFlash().setKeepMessages(true);
    // ...
    

    这在当前 Mojarra 2.1.13 版本中只有一个警告:重定向必须在 URL 中的同一“文件夹”中进行。这在即将到来的 2.1.14 中得到修复。另见issue 2136

    【讨论】:

    • 我会尝试一下,它就像一个魅力。再次感谢。
    【解决方案2】:

    【讨论】:

    • 两位作者都是 imo 的伟大贡献者。
    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多