我正在尝试将一个现有的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应用程序中的内容了,直到我开始迁移工作之前,我不打算删除它。
有人能告诉我可能会导致导航出现问题的错误吗?