синхронизация страниц в адресной строке в веб-приложении с использованием jsf2 - PullRequest
1 голос
/ 05 сентября 2011

Я работаю в приложении jsf2, и у меня проблема с именем страницы, отображаемым в адресной строке.Когда я перехожу на другую страницу, в адресной строке появляется имя предыдущей страницы.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011

Это потому, что вы используете POST вместо GET для постраничной навигации и JSF по умолчанию отправляет в тот же самый вид, который вы используете <h:form>.Использование POST для навигации по страницам в любом случае является очень плохим подходом.Это не только не удобно для пользователя (это не закладки и не сбивает с толку), но и не оптимизировано для SEO (поисковые роботы не выполняют <form> действий).

Чтобы решить эту проблему, вы должны прекратить использовать <h:commandLink>для постраничной навигации.Вместо этого используйте <h:link>.

<h:link value="Go to next page" outcome="nextpage" />

Это просто отобразит

<a href="/contextpath/nextpage.xhtml">Go to next page</a>

, который отлично подходит для закладок, удобен для пользователя и оптимизирован для SEO.

Когда выпереходя на другую страницу в результате реальной отправки формы POST, я бы также заменил ее возвратом null или void и просто отобразил бы результат / сообщения условно в том же виде.Или, если результат должен быть добавлен в закладки (например, результаты поиска), вам следует использовать обычные ссылки или просто <form> вместо <h:form> и использовать <f:viewParam> в целевом представлении.

См. Также:

2 голосов
/ 05 сентября 2011

Это происходит потому, что в JSF, когда вы переходите на новую страницу, сервер выполняет пересылку на новую страницу. Браузер не знает о переадресации и отображает старый URL. Чтобы сервер выполнял перенаправление вместо переадресации, вам необходимо:

Если вы используете правила навигации, добавьте <redirect/> к каждому правилу:

<navigation-rule>
   <from-view-id>/pages/from.xhtml</from-view-id>
      <navigation-case>
    <from-outcome>to</from-outcome>
        <to-view-id>/pages/to.xhtml</to-view-id>
        <redirect/>
    </navigation-case>
</navigation-rule>

Если вы возвращаете результат из бобового метода, добавьте ?faces-redirect=true к результату:

public String navigate() {
   return "/pages/to?faces-redirect=true";
}
...