Я пытаюсь перенести существующее приложение JSF с JSF 1.2 на JSF 2.0. Я использовал MyFaces 1.2.8 и хочу использовать MyFaces 2.0.5.
Что я испытываю с MyFaces 2.0.5, так это то, что первоначально запрошенная страница будет отображаться правильно, но любая попытка перейти на другую страницу приведет к ошибке ViewExpiredException
. Сообщение:
Не удалось найти сохраненное состояние просмотра для идентификатора представления: /SomePageName.jsf (где SomePageName — это имя страницы, с которой я ухожу)
Если я вручную ввожу удобный для лиц 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, и я не планирую его удалять, пока не начну миграцию)
Может ли кто-нибудь сказать мне, что я могу делать неправильно, что может привести к такому взрыву навигации?