2011-02-28 60 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" />