我正在尝试将现有的JSF应用程序从JSF 1.2迁移到JSF 2.0 . 我正在使用MyFaces 1.2.8并想使用MyFaces 2.0.5 .
我在使用MyFaces 2.0.5时遇到的情况是,最初请求的页面将正确呈现,但任何导航到另一个页面的尝试都将导致 ViewExpiredException
. 消息是:
No saved view state could be found for the view identifier: /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应用程序中了,我不打算在开始迁移之前删除它)
Can anyone tell me what I might be doing wrong that would cause the navigation to blow up like this?
2 回答
我怀疑这是特定于MyFaces的,从Mojarra 1.2迁移到2.0时我们没有遇到此问题 . 我建议尝试一下,即使它只是为了排除这个和其他,以便你最终可以向MyFaces男孩报告问题 .
Tomahawk / Trinidad没有明确要求MyFaces作为JSF impl . 这是一个(营销)神话 . 他们恰好来自同一个供应商(Apache) . 第三方JSF组件库只需要一个JSF API . impl(Mojarra,MyFaces等)真的应该不重要 .
此问题已修复:
https://issues.apache.org/jira/browse/MYFACES-3101
注意MyFaces 2.0.7和2.1.1有修复 .