Jsf 2 使用Flash从servlet或JAX-RS重定向后显示FacesMessage

Jsf 2 使用Flash从servlet或JAX-RS重定向后显示FacesMessage,jsf-2,Jsf 2,我想通过servlet或JAX-RS实现激活链接(不重要是哪一个),然后将用户重定向到正确的页面,给他留下一条存储在Flash中的FacesMessage。重定向本身没有问题,但是我不知道如何访问Flash。您可以从外部上下文获得对Flash对象的访问: 获取对闪存的访问权限: Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash(); 在对象上设置keepMessages=true,以确保

我想通过servlet或JAX-RS实现激活链接(不重要是哪一个),然后将用户重定向到正确的页面,给他留下一条存储在Flash中的FacesMessage。重定向本身没有问题,但是我不知道如何访问Flash。

您可以从
外部上下文获得对
Flash
对象的访问:

  • 获取对
    闪存的访问权限

    Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
    
  • 在对象上设置
    keepMessages=true
    ,以确保存储在其中的
    FacesMessage
    在重定向后仍然有效

    flash.setKeepMessages(true);
    
  • 使用
    putNow
    方法存储您的
    FacesMessages
    ,以确保即使在重定向之后,这些消息仍能在至少一次页面刷新后存活

    flash.putNow(yourFacesMessage);
    
  • 你真的不需要将
    FacesMessage
    存储在flash对象本身中;在
    FacesContext
    中对它们进行排队就足以保证它们在另一个页面上可用

    相关的:


    您确定它应该在servlet中工作吗?我在
    ExternalContext ec=facesContext.getExternalContext()处获得NPE
    facesContext
    通过
    facesContext.getCurrentInstance()获得@Guest您的问题在这方面不清楚;您应该声明您正在尝试检索servlet中的
    Flash
    对象。在这种情况下,我建议不要这样做。只需将消息存储为请求属性并在目标支持bean中检索即可。如果您坚持使用flash对象,请使用来检索
    FacesContext
    并获取flash对象