2013-01-16 50 views
4

我有一個頁面,當我保存數據時添加新項目我去其他頁面,我想看到「數據已保存成功」的消息。我讀到這條消息屬於請求範圍,這就是我使用Flash範圍的原因。發送Flash信息到重定向頁面

context.addMessage("calendarGameForm:growl", new FacesMessage("Data was saved successful"); 
context.getExternalContext().getFlash().setKeepMessages(true); 
return outcome; 

這是由第一頁addSeason.xhtml上的保存按鈕調用的。

<p:commandButton id="save" action="#{controller.add}" 
       value="#{msg.save}" ajax="true" 
       type="submit" update="@form"/> 

導航規則定義如下。

<navigation-rule> 
    <from-view-id>/competitions/addSeason.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>success</from-outcome> 
     <to-view-id>/competitions/calendarGame.xhtml</to-view-id> 
     <redirect/> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>fail</from-outcome> 
     <to-view-id>/competitions/calendarGame.xhtml</to-view-id> 
     <redirect/> 
    </navigation-case> 
</navigation-rule> 

但在目標頁面calendarGame.xhtml我沒有得到我的消息。

<p:growl id="growl" globalOnly="true" sticky="true"/> 

我也在服務器日誌中收到此警告。

警告[javax.enterprise.resource.webcontainer.jsf.flash(AJP - 127.0.0.1-8009-1)JSF1095:響應已通過我們試圖爲即將離任的餅乾時提交閃光。存儲到閃存中的任何值都將在下一個請求中不可用。

我該如何解決我的問題?

回答

6

這個問題是雙重的。

至於第一個問題,我收集到你在操作方法中添加面孔信息,而不是在預渲染視圖中,對嗎?你有一個return outcome,所以它是有道理的,它是在一個真實的行動方法。在這種情況下,JSF1095消息是由Mojarra中的Ajax編碼相關錯誤引起的,並在2.1.11中修復。 Mojarra有很多Flash範圍相關的問題,其中最後一個在2.1.14中修復。我建議將Mojarra更新至至少該版本。它已經在2.1.17上了currently

至於第二個問題,<p:growl globalOnly="true">只顯示帶有null客戶端ID的消息。修復您的addMessage()調用,而不是通過null

context.addMessage(null, message); 

如果你是實際上導航之前預渲染事件過程中添加的面孔消息,那麼問題就會有不同的原因,可能需要不同的解決方案。請參閱其他人的答案:Mojarra 2.1.14 flash scope messages and redirect to different path

+0

@BalucC非常感謝) – Ray

+0

不客氣。 – BalusC

0

必須在接收頁面/視圖中設置消息。要做到這一點,我會嘗試使用由preRenderViewEvent調用的函數。您應該在其中添加代碼的位置(您也可以使用其他形式的郵件通知)

preRenderViewEvent用法的示例。

相關問題