我試圖將現有的JSF應用程序從JSF 1.2遷移到JSF 2.0。我使用MyFaces 1.2.8並想使用MyFaces 2.0.5。從JSF 1.2遷移到JSF 2.0後的每個導航中的ViewExpiredException
我使用MyFaces 2.0.5時遇到的情況是,初始請求的頁面將正確呈現,但任何嘗試導航到另一個頁面都將導致ViewExpiredException
。該消息是:
沒有保存的視圖狀態可以爲視圖識別符發現:/SomePageName.jsf(其中「SomePageName」是頁面的,我從導航離開名稱)
如果我手動輸入我想要導航到的頁面的Faces友好URL,例如http://localhost:8080/MYAPP/SomeOtherPage.jsf,那麼其他頁面將被正確呈現。該應用程序還認識到,我已經有一個會話,並沒有嘗試創建一個新的。
我的應用程序僅包含JSP文件,就像您期望從JSF 1.2應用程序中獲得的一樣。我的意圖是首先讓應用程序在JSF 2.0中工作,然後每次將每個頁面重寫爲Facelet。
我的一些導航規則是這樣的:
<navigation-rule>
<display-name>ManagePorts</displayName>
<from-view-id>/ManagePorts.jsp</from-view-id>
<navigation-case>
<from-outcome>REFRESH</from-outcome>
<to-view-id>/ManagePorts.jsp</to-view-id>
</navigation-case>
</navigation-rule>
和一些看起來像這樣:
<navigation-rule>
<navigation-case>
<from-outcome>MANAGE_PORT_LIST</from-outcome>
<to-view-id>/ManagePorts.jsp</to-view-id>
</navigation-case>
</navigation-rule>
(我認識到,刷新結果是不做事的最佳方式,但這已經在舊的1.2應用程序,我不打算刪除它,直到我開始遷移努力)
任何人都可以告訴我,我可能會做什麼g錯誤會導致導航如此爆炸?
我懷疑這是MyFaces特有的,當從[Mojarra](http://javaserverfaces.java.net)1.2遷移到2.0時,我們沒有這個問題。我會建議嘗試它,即使它只是排除一個和其他,以便您最終可以將問題報告給MyFaces男孩。 – BalusC 2011-05-27 14:34:05
我正在用盡想法,所以也許嘗試不同的JSF實現是唯一合乎邏輯的選擇。我只是猶豫,因爲我正在遷移的應用程序中使用MyFaces Tomahawk和Trinidad附加組件。爲了嘗試使用Mojarra(或其他)的應用程序,我將不得不刪除依賴附加組件的頁面塊。哦,我想我應該停止煩惱,只是做! :) – 2011-05-27 15:18:12
Tomahawk/Trinidad沒有明確要求MyFaces作爲JSF impl。這是一個(營銷)神話。他們恰好來自同一個供應商(Apache)。第三方JSF組件庫只需要一個JSF API。 impl(Mojarra,MyFaces等)確實不重要。 – BalusC 2011-05-27 15:19:01