将FacesMessage传递到下一页

时间:2012-09-18 16:50:01

标签: jsf-2

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

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

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

似乎 FacesContext 会清除导航中的所有消息,因此我最接近的解决方案如下所示:

  1. 将FacesMessage对象存储在会话bean中。
  2. 在消息bean中创建一个方法 checkMessage ,该方法调用 FacesContext.getCurrentInstance()。addMessage(..)并从消息bean中删除该消息。
  3. 在目标网页中添加对 checkMessage 的EL引用。
  4. 在目标网页中添加 p:消息
  5. 这似乎有点强迫 - 有更好的方法吗?

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:1)