Java 在重定向后保留FacesMessage,以便通过<;h:消息>;在JSF中

Java 在重定向后保留FacesMessage,以便通过<;h:消息>;在JSF中,java,jsf,redirect,jsf-2,Java,Jsf,Redirect,Jsf 2,我有一个我认为是常见的问题:一些托管bean有一个操作,它将一些消息添加到上下文中: FacesMessage fm = new FacesMessage("didn't work"); fm.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, fm); return "some-outcome"; 然后我将结果映射到faces config.xml中,并将其配

我有一个我认为是常见的问题:一些托管bean有一个操作,它将一些消息添加到上下文中:

FacesMessage fm = new FacesMessage("didn't work");
fm.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, fm);
return "some-outcome";
然后我将结果映射到
faces config.xml
中,并将其配置为

<navigation-case>
    <from-outcome>some-outcome</from-outcome>
    <to-view-id>/view.xhtml</to-view-id>
    <redirect/>
</navigation-case>
但是,它不起作用,因为执行重定向时消息丢失


我该怎么解决呢?我发现这解释了如何使用
PhaseListener
来完成,但我认为这种情况太普遍了,不需要用这种方式来解决。我错了吗?我是否应该创建
相位侦听器
?或者有其他标准解决方案吗?

巴卢斯克一如既往地给出了很好的答案

我只想补充一点,当我使用他的代码设置keepMessages属性时,它不是为会话设置的,而是只为这个请求设置的(不管Javadocs中怎么说)

我将以下代码放在header.xhtml中

现在它可以在每一页上工作,而无需在每次需要时在backingbean中设置它。 为此,您需要JSTL,不要忘记在xhtml标头中添加以下内容:
xmlns:c=”http://java.sun.com/jsp/jstl/core“

JSF2.2

进入豆子:

FacesContext facesContext = FacesContext.getCurrentInstance();
Flash flash = facesContext.getExternalContext().getFlash();
flash.setKeepMessages(true);
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "yourMessage", null));
return "namePage?faces-redirect=true"; 
进入名称页

改变

<h:message globalsOnly="true" />



@BalusC答案在哪里?嗯。。。。无法读取“惊人帖子”中的代码。也找不到@BalusC答案。@JoshuaDavis我记得BalusC给出了一个很好的答案。事实上,我已经把这个答案标记为答案。我想知道发生了什么…我想这是BalusC帖子的链接:
<h:message globalsOnly="true" />
<h:messages globalsOnly="true" />