Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JSF 1.2迁移到JSF 2.0后,每次导航都会出现ViewExpiredException_Java_Jsf_Jsf 2_Myfaces_Viewexpiredexception - Fatal编程技术网

Java 从JSF 1.2迁移到JSF 2.0后,每次导航都会出现ViewExpiredException

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,例如,则其

我正在尝试将现有的JSF应用程序从JSF1.2迁移到JSF2.0。我使用的是MyFaces1.2.8,想使用MyFaces2.0.5

我在MyFaces 2.0.5中遇到的情况是,最初请求的页面将正确呈现,但任何导航到另一个页面的尝试都将导致
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很久以前就被选中用于这个项目,没有什么特别的原因,所以我将在迁移期间替换它。谢谢你的帮助!不客气。我把它作为答复转寄了出去。