我正在尝试将现有的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应用程序中,我不打算在开始迁移之前将其删除)
任何人都可以告诉我,我可能做错了会导致导航爆炸吗?
答案 0 :(得分:2)
我怀疑这是特定于MyFaces的,我们在从Mojarra 1.2迁移到2.0时没有遇到此问题。我建议尝试一下,即使它只是为了排除这一个和另一个,以便你最终可以向MyFaces男孩报告这个问题。
我的想法已经不多了,所以尝试不同的JSF实现是唯一合乎逻辑的选择。我只是犹豫,因为我们正在迁移的应用程序中使用MyFaces Tomahawk和Trinidad附加组件。为了使用Mojarra(或其他东西)尝试应用程序,我将不得不删除依赖于附加组件的页面块。哦,好吧,我想我应该停止烦恼,就这样做吧! :)
Tomahawk / Trinidad没有明确要求MyFaces作为JSF impl。这是一个(营销)神话。他们恰好来自同一个供应商(Apache)。第三方JSF组件库只需要一个JSF API。 impl(Mojarra,MyFaces等)真的不重要。
答案 1 :(得分:0)