Java 在重定向后保留FacesMessage,以便通过<;h:消息>;在JSF中
我有一个我认为是常见的问题:一些托管bean有一个操作,它将一些消息添加到上下文中: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中,并将其配
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" />