2011-05-27 53 views
4

我试图将现有的JSF应用程序从JSF 1.2迁移到JSF 2.0。我使用MyFaces 1.2.8并想使用MyFaces 2.0.5。从JSF 1.2迁移到JSF 2.0后的每个导航中的ViewExpiredException

我使用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> 

(我认识到,刷新结果是不做事的最佳方式,但这已经在旧的1.2应用程序,我不打算删除它,直到我开始迁移努力)

任何人都可以告诉我,我可能会做什么g错误会导致导航如此爆炸?

+1

我怀疑这是MyFaces特有的,当从[Mojarra](http://javaserverfaces.java.net)1.2迁移到2.0时,我们没有这个问题。我会建议尝试它,即使它只是排除一个和其他,以便您最终可以将问题报告给MyFaces男孩。 – BalusC 2011-05-27 14:34:05

+0

我正在用尽想法,所以也许尝试不同的JSF实现是唯一合乎逻辑的选择。我只是犹豫,因为我正在迁移的应用程序中使用MyFaces Tomahawk和Trinidad附加组件。为了尝试使用Mojarra(或其他)的应用程序,我将不得不删除依赖附加组件的页面块。哦,我想我应该停止烦恼,只是做! :) – 2011-05-27 15:18:12

+1

Tomahawk/Trinidad没有明确要求MyFaces作为JSF impl。这是一个(营销)神话。他们恰好来自同一个供应商(Apache)。第三方JSF组件库只需要一个JSF API。 impl(Mojarra,MyFaces等)确实不重要。 – BalusC 2011-05-27 15:19:01

回答

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等)确实不重要。