Семантика "?faces-redirect=true " in и почему бы не использовать его везде

Я хотел бы понять, какова семантика добавления "?faces-redirect=true" в свойстве действия <h:commandlink> тег в JSF2.0. Будь то с ним или без него, приложение действительно переходит на целевую страницу, указанную в действии. Поэтому на первый взгляд кажется, что единственный эффект-косметический, т. е. предоставить обратную связь Пользователю (если он смотрит на посещенный URL браузера), что он перешел на новую страницу. Но если это так безобидно и без побочных эффектов, я не понимаю, почему это не поведение по умолчанию. Я подозреваю, что это связано с пост-механизмом JSF2.0. Я заметил при просмотре приложения JSF, что URL-адреса, которые вы видите в своем браузере (когда ?faces-redirect=true не используется) являются те из "предыдущей ""страницы".

meta-NB. Я за брандмауэром и страдаю от проблемы "SO требует внешнего JavaScript из другого домена", поэтому я прошу прощения за отсутствие форматирования. Я также предоставлю отзывы о ваших ответах через несколько часов, когда я могу получить доступ из другого домена.

1 ответов


переход от страницы к странице не должен выполняться с помощью POST вообще. Вы должны использовать normal <h:link> или <h:button> для этого вместо <h:commandLink> или <h:commandButton>.

так вместо

<h:commandLink value="Next page" action=nextpage.xhtml?faces-redirect=true" />

вы должны использовать

<h:link value="Next page" outcome="nextpage.xhtml" />

это имеет главное преимущество, что сайт теперь SEO дружественный. Searchbots, а именно, не индексирует формы.

использовать <h:commandLink> только если вам нужно отправить форму с некоторым пользовательским вводом. Но чаще всего результат просто представлен на той же странице, если необходимо условно визуализировать / включить. Только при успешной отправке, которая абсолютно необходима для перехода на другую страницу (например, login/logout), вы действительно должны отправлять перенаправление. Это так называемый Post-Redirect-получить шаблон.

см. также