将FacesMessage传递到下一页

Ala*_*ect 4 jsf-2

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

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

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

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

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

这似乎有点被迫 - 有更好的方法吗?

Bal*_*usC 12

Faces消息确实是请求范围.

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

context.addMessage(clientId, message);
context.getExternalContext().getFlash().setKeepMessages(true);
// ...
Run Code Online (Sandbox Code Playgroud)

这在当前的Mojarra 2.1.13版本中只有一个警告:重定向必须发生在URL中的相同"文件夹"中.这在即将到来的2.1.14中得到修复.另见问题2136.