2016-03-04 57 views
2

我有一個不受保護的登錄頁面,可以通過不同的導航工具訪問。在單個頁面上避免JSF 1.2中的ViewExpiredException

問題:許多用戶訪問該登錄頁面並在打開一段時間後再重新登錄。繁榮!可怕的ViewExpiredException發生!我想避免ViewExpiredException讓他們再次登錄。我不想要所有視圖的解決方法,但只需要頁面上的標誌。

我無法遷移到JSF2(出於預算原因)。

我有這樣的配置:

javax.faces.STATE_SAVING_METHOD = server 

,我不能改變(我們有一個有限的帶寬和阻斷HTTP請求的機制比小表單頁面非常有限的輸入字段更大

任何想法?

+2

如果你正在使用Mojarra(不是MyFaces),你只能通過將上下文參數com.sun.faces.enableRestoreView11Compatibility設置爲true來爲整個應用程序(而不是單個頁面)配置它。這可以接受嗎? – BalusC

+0

好吧,也許!視圖過期後,其他頁面會發生什麼?我會如以前的文章中所說的那樣獲得一些「WTF」體驗嗎? – pmartin8

+1

僅當您依賴視圖作用域狀態時,但在JSF 1.x中,「視圖作用域」已不作爲託管bean作用域存在。如果您使用的東西如Tomahawk的來模擬JSF 2.x視圖範圍,那麼它可能以「WTF」體驗結束,因爲引用的bean將從頭開始重建,而不是在視圖到期時重用(因此改爲錯誤頁面,你會得到一個新的bean) – BalusC

回答

1

我不能讓我的登錄頁面了JSF上下文的,因爲在我的登錄頁面依賴於JSF上下文行爲的一大堆。

我終於用骯髒的黑客解決了這個問題。在RestoreViewPhase偵聽器中,我檢測到當前視圖已過期,並且將所有參數從HTTP請求中取出並轉換爲會話託管bean。

然後,當我回到登錄頁面時,一些javascript會自動重新提交表單並顯示新的視圖。

漂亮哈克,但它的作品。

相關問題