2011-02-28 61 views
9
重定向

我有什么,我想是一个共同的问题:一些管理bean有它增加了一些消息的背景下一个动作:保留的FacesMessage后呈现通过<h:message>在JSF

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> 

view.xhtml我呈现消息:

<h:message globalsOnly="true" /> 

但是,它不起作用,因为重定向执行时消息丢失。

我该如何解决它?我发现这个amazing post解释了如何使用PhaseListener来做到这一点,但我认为这种情况太常见了,无法通过这种方式来解决。我错了吗?我应该创建PhaseListener吗?或者还有其他的标准解决方案吗?

+5

哪里@BalusC答案吗? – brandizzi 2011-10-20 15:10:25

+4

嗯....无法读取'惊人的帖子'中的代码。也找不到@BalusC答案。 – 2011-12-16 21:11:57

+0

@JoshuaDavis我记得BalusC已经发布了一个很好的答案。其实,我已将这个答案标记为*答案。我想知道发生了什么...... – brandizzi 2011-12-17 01:36:17

回答

6

像往常一样从BalusC很好的回答!

我只是想补充,当我用他的代码来设置keepMessages属性时,它没有设置为会话,但仅用于此请求(尽管它在Javadoc中说了什么)。

我把下面的代码在我header.xhtml <c:set target="#{flash}" property="keepMessages" value="true" />

现在,它的工作原理在每个页面上,没有我不必每次我需要它的支持Bean时设置。 您需要JSTL对于这一点,不要忘了把以下在你的XHTML头: xmlns:c="http://java.sun.com/jsp/jstl/core"

+1

我认为这是BalusC的帖子的链接:http://balusc.blogspot.com/2007/03/post-redirect-get-pattern.html – seanf 2012-06-18 05:11:35

2

JSF 2.2

到bean:

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"; 

进入namePage

更改

<h:message globalsOnly="true" /> 

<h:messages globalsOnly="true" />