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

2023-12-22

我正在尝试将现有的 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 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 应用程序中,并且在开始迁移工作之前我不打算删除它)

谁能告诉我我可能做错了什么会导致导航像这样爆炸?


我怀疑这是 MyFaces 特有的,我们在迁移时没有遇到这个问题Mojarra http://javaserverfaces.java.net1.2 至 2.0。我建议您尝试一下,尽管这只是排除其中之一,以便您最终可以向 MyFaces 男孩报告该问题。

我已经没有想法了,所以也许尝试不同的 JSF 实现是唯一合乎逻辑的选择。我只是在犹豫,因为我们正在迁移的应用程序中使用 MyFaces Tomahawk 和 Trinidad 附加组件。为了使用 Mojarra(或其他东西)尝试该应用程序,我必须删除依赖于附加组件的页面块。哦,好吧,我想我应该停止为此烦恼,去做吧! :)

Tomahawk/Trinidad 没有明确要求 MyFaces 作为 JSF 实现。这是一个(营销)神话。它们恰好来自同一供应商(Apache)。第 3 方 JSF 组件库只需要 JSF API。 impl(Mojarra、MyFaces 等)确实不重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 JSF 1.2 迁移到 JSF 2.0 后,每次导航时都会出现 ViewExpiredException 的相关文章

随机推荐