4

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

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

4

2 回答 2

2

我怀疑这是 MyFaces 特有的,从Mojarra 1.2迁移到 2.0 时我们没有遇到这个问题。我建议改为尝试它,即使它只是排除一个和另一个,以便您最终可以将问题报告给 MyFaces 男孩。

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

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

于 2011-05-27T18:07:32.987 回答
0

此问题已解决:

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

注意 MyFaces 2.0.7 和 2.1.1 已修复。

于 2011-06-25T05:22:47.740 回答