У меня есть маленький проект IceFaces. При открытии базового URL localhost: 8080 / myContextPath открывается файл index.jsp со следующим содержимым:
<html>
<head> </head>
<body>
<jsp:forward page="faces/search.xhtml" />
</body>
</html>
Это первое перенаправление на лица / search.xhtml. Страница отображается без проблем. В адресной строке браузера отображается localhost: 8080 / myContextPath , как и ожидалось.
На странице search.xhtml есть кнопка отправки, похожая на эту:
<h:commandButton type="submit" value="Search" id="submit" actionListener="#{searchBean.submitButton}" action="#{searchBean.navigate}" />
Нажатие на эту кнопку запускает actionListener, а затем navigate -action, которая возвращает простое success .
Само правило навигации выглядит так:
<navigation-rule>
<from-view-id>/search.xhtml</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/search.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Правило навигации должно, насколько я понимаю, применяться при любых обстоятельствах.
К сожалению, иногда это не работает. Чтобы быть точным, каждый второй раз это не работает. Нажатие на кнопку отправки запускает сначала прослушиватель действий, а затем веб-приложение «думает» в течение 1-2 секунд, а затем перенаправляет на сломанную страницу.
Разница между обычным образом
localhost: 8080 / myContextPath -> нажмите кнопку отправки -> localhost: 8080 / myContextPath
и сломанный путь, это выглядит так в адресной строке
localhost: 8080 / myContextPath -> нажмите кнопку отправки -> localhost: 8080 / myContextPath /faces / search.xhtml.
Страница разрывается, потому что все файлы javascript и css больше не могут быть найдены, потому что на них ссылается относительный путь.
Есть ли у вас какие-либо идеи, какие проблемы могут быть причиной этой сломанной навигации?
Одним словом: загрузка страницы в первый раз - это простое перенаправление на страницу index.jsp: index.jsp -> jsp: formward -> search.xhtml. Затем я нажимаю кнопку отправки, и правило навигации перезагружает search.xhtml. Теперь я нажимаю второй раз кнопку отправки, и теперь правило навигации больше не работает. Вместо этого URL-адрес изменяется в адресной строке на localhost: 8080 //face / search.xhtml вместо того, чтобы оставаться на localhost: 8080 /.
С наилучшими пожеланиями
Tobias