首页 文章

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

提问于
浏览
4

我正在尝试将现有的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 回答

  • 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等)真的应该不重要 .

  • 0

    此问题已修复:

    https://issues.apache.org/jira/browse/MYFACES-3101

    注意MyFaces 2.0.7和2.1.1有修复 .

相关问题