ViewExpiredException при каждой навигации после перехода с JSF 1.2 на JSF 2.0 - PullRequest
4 голосов
/ 27 мая 2011

Я пытаюсь перенести существующее приложение 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, и я не планирую его удалять, пока яначать миграцию)

Может кто-нибудь сказать мне, что я могу делать неправильно, что может привести к тому, что навигация взорвется вот так?

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Я подозреваю, что это специфично для MyFaces, у нас не было этой проблемы при переходе с Mojarra 1.2 на 2.0.Я бы предложил вместо этого попробовать, хотя это только для того, чтобы исключить одно и другое, чтобы вы могли в конечном итоге сообщить о проблеме мальчикам из MyFaces.так что, возможно, попытка другой реализации JSF - единственная логическая альтернатива.Я только колеблюсь, потому что мы используем дополнения MyFaces Tomahawk и Тринидад в приложении, которое я переношу.Чтобы попробовать приложение, используя Mojarra (или что-то еще), мне придется удалить куски страниц, которые зависят от надстроек.О, хорошо, я думаю, что я должен перестать беспокоиться об этом и просто сделать это!:)

Томагавк / Тринидад явно не требует MyFaces в качестве JSF.Это (маркетинговый) миф.Они просто принадлежат одному поставщику (Apache).Библиотеки компонентов JSF сторонних производителей просто требуют API JSF.Impl (Mojarra, MyFaces и т. Д.) Действительно не должен иметь значения.

0 голосов
/ 25 июня 2011

Эта проблема была исправлена:

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

Примечание. В MyFaces 2.0.7 и 2.1.1 есть исправление.

...