我正在尝试将现有的 JSF 应用程序从 JSF 1.2 迁移到 JSF 2.0。我使用的是 MyFaces 1.2.8 并想使用 MyFaces 2.0.5。
我在使用 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>
(我意识到 REFRESH 结果不是做事的最佳方式,但这已经在旧的 1.2 应用程序中,我不打算在开始迁移工作之前将其删除)
谁能告诉我我可能做错了什么会导致导航像这样爆炸?