2014-01-16 124 views
1

我有一個viewScoped bean,它有一些業務邏輯驗證。 我使用JSF消息持久性

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, result, null)); 

顯示來自此驗證頁面所得誤差的問題是:

  1. 用戶提交無效形式重新顯示
  2. 形式,由於使用PRG
  3. 消息不顯示給用戶

我用下面這行代碼解決了這個問題:

FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(true); 

現在的問題是,業務邏輯驗證消息持續過長:

  1. 用戶提交無效表單
  2. 形式的錯誤消息再次顯示
  3. 用戶修正並提交有效的形式
  4. 形式重新顯示「成功」消息,而且還顯示先前的錯誤消息。

我該如何解決這個問題?

+0

你用什麼來向用戶顯示錯誤信息。你可以請分享可能會設置一個超時的消息可以幫助。請分享消息組件。 –

+2

您是否暗示您正在執行操作方法中的驗證,並且當您不需要重定向時也調用'Flash#setKeepMessages()'?當你真的需要重定向時,你應該只調用它**。 – BalusC

+0

謝謝@VinayakPingale。我已更新。 –

回答

2

根據你的問題的評論,你使用鑽嘴魚科2.0.3:

[JSFImplManagementDeployer] Initialized 3 JSF configurations: [Mojarra-1.2, MyFaces-2.0, Mojarra-2.0] 
[javax.enterprise.resource.webcontainer.jsf.config] Initializing Mojarra 2.0.3 (b05) 

這實在是一個古老的鑽嘴魚科的版本。目前它已經超過3.5歲了! (2010年7月發佈)。具體問題是由具體issue 1751引起的,該問題已在2.0.7/2.1.4中修復。然而,之後還有許多與閃光範圍有關的其他問題報告。閃光範圍是在以下主要問題稱爲舊的鑽嘴魚科的版本:

總而言之,得出結論可能是您需要升級到最低限度的Mojarra 2.1.27/2.2.5以擺脫所有這些問題。

記錄器中的JSFImplManagementDeployer條目可識別爲來自JBoss 6.x的條目。古老的Mojarra 2.0.3反過來表明你仍然在使用第一個JBoss 6.0.0版本。這充滿了bug,強烈建議升級到更新的JBoss服務器,不僅要修復Mojarra問題,還要修復其他許多問題。考慮升級到JBoss AS 7.3.x或EAP 6.2.x.如有必要,您可以根據此答案中的說明升級其捆綁的Mojarra:Upgrade JSF/Mojarra in JBoss AS/EAP/WildFly