IceFaces 2 - правило навигации иногда не применяется - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть маленький проект 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

1 Ответ

0 голосов
/ 04 ноября 2011

Когда вы делаете это, на самом деле происходит то, что вы делаете серверную сторону вперед, а не клиентскую reDirect, поэтому, хотя ваша адресная строка отображает «myContextPath», она уже находится под «Face / Search.xhtml»

<jsp:forward page="faces/search.xhtml" />

В основном, когда вы нажимаете «перейти», измените правило с /search.xhtml на /faces/search.xhtml

...