Java 从JSF 1.2迁移到JSF 2.0后,每次导航都会出现ViewExpiredException
我正在尝试将现有的JSF应用程序从JSF1.2迁移到JSF2.0。我使用的是MyFaces1.2.8,想使用MyFaces2.0.5 我在MyFaces 2.0.5中遇到的情况是,最初请求的页面将正确呈现,但任何导航到另一个页面的尝试都将导致Java 从JSF 1.2迁移到JSF 2.0后,每次导航都会出现ViewExpiredException,java,jsf,jsf-2,myfaces,viewexpiredexception,Java,Jsf,Jsf 2,Myfaces,Viewexpiredexception,我正在尝试将现有的JSF应用程序从JSF1.2迁移到JSF2.0。我使用的是MyFaces1.2.8,想使用MyFaces2.0.5 我在MyFaces 2.0.5中遇到的情况是,最初请求的页面将正确呈现,但任何导航到另一个页面的尝试都将导致ViewExpiredException。信息是: 找不到视图标识符:/SomePageName.jsf的已保存视图状态(其中“SomePageName”是我导航离开的页面的名称) 如果手动键入要导航到的页面的Faces-friendly URL,例如,则其
ViewExpiredException
。信息是:
找不到视图标识符:/SomePageName.jsf的已保存视图状态(其中“SomePageName”是我导航离开的页面的名称)
如果手动键入要导航到的页面的Faces-friendly URL,例如,则其他页面将正确呈现。应用程序还认识到我已经有一个会话,并且不尝试创建一个新会话
我的应用程序完全由JSP文件组成,正如您在JSF1.2应用程序中所期望的那样。我的意图是首先让应用程序在JSF2.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>
管理端口
/ManagePorts.jsp
刷新
/ManagePorts.jsp
有些看起来像这样:
<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>
管理端口列表
/ManagePorts.jsp
(我意识到刷新结果并不是做事情的最佳方式,但这在旧的1.2应用程序中已经存在,在开始迁移之前,我不打算删除它)
有人能告诉我我可能做错了什么,导致导航像这样爆炸吗?我怀疑这是MyFaces特有的,从1.2迁移到2.0时我们没有这个问题。我建议你试试看,尽管这只是为了排除一个和另一个,这样你最终可以向MyFaces boys报告这个问题
我的想法已经没有了,所以尝试不同的JSF实现可能是唯一合乎逻辑的选择。我只是在犹豫,因为我们正在迁移的应用程序中使用MyFaces Tomahawk和Trinidad附加组件。为了尝试使用Mojara(或其他东西)的应用程序,我必须删除依赖于附加组件的页面块。哦,好吧,我想我应该停止为此烦恼,去做吧!:)
Tomahawk/Trinidad没有明确要求MyFaces作为JSF impl。这是一个(营销)神话。它们恰好来自同一个供应商(Apache)。第三方JSF组件库只需要JSFAPI。impl(Mojarra、MyFaces等)真的不重要。此问题已解决:
注:MyFaces 2.0.7和2.1.1已修复 我怀疑这是MyFaces特有的,从1.2迁移到2.0时没有这个问题。我建议您尝试一下,尽管这只是为了排除一个和另一个,以便您最终能够向MyFaces boys报告问题。我已经没有想法了,所以可能尝试不同的JSF实现是唯一合乎逻辑的选择。我只是在犹豫,因为我们正在迁移的应用程序中使用MyFaces Tomahawk和Trinidad附加组件。为了尝试使用Mojara(或其他东西)的应用程序,我必须删除依赖于附加组件的页面块。哦,好吧,我想我应该停止为此烦恼,去做吧!:)Tomahawk/Trinidad没有明确要求MyFaces作为JSF impl。这是一个(营销)神话。它们恰好来自同一个供应商(Apache)。第三方JSF组件库只需要JSFAPI。impl(Mojarra、MyFaces等)真的不重要。你在所有方面都是正确的!首先,我用最新的Mojarra JAR(我想是2.1.1版)替换了MyFaces核心JSF JAR(API和impl)。我开始没有class def异常,并且认为你对特立尼达和战斧的看法是错误的。问题是编译后的JSP缓存仍然希望使用MyFaces。当JSP缓存被清除后,突然间一切都恢复到JSF1.2下的工作方式。MyFaces很久以前就被选中用于这个项目,没有什么特别的原因,所以我将在迁移期间替换它。谢谢你的帮助!不客气。我把它作为答复转寄了出去。