Семантика "? Faces-redirect = true" в <commandlink action =...> и почему бы не использовать ее везде
Я хотел бы понять, какова семантика за добавлением "?faces-redirect=true"
в свойство action тега <h:commandlink>
в JSF2.0. Независимо от того, с ней или без нее, приложение действительно переходит на целевую страницу, указанную в действии. Таким образом, на первый взгляд кажется, что единственный эффект является косметическим, то есть предоставлять обратную связь пользователю (если он смотрит URL-адрес, посещенный браузером), который он переместил на новую страницу. Но если это так безобидно и без побочных эффектов, я не понимаю, почему это не поведение по умолчанию. Я подозреваю, что это связано с пост-основанным механизмом JSF2.0. Я заметил при просмотре приложения JSF, что URL-адреса, которые вы видите в его браузере (когда ?faces-redirect=true
не используется), являются страницами "предыдущей" "страницы".
мета-NB. Я за брандмауэром и страдает от проблемы "SO требует внешнего JavaScript из другого домена", поэтому я приношу свои извинения за отсутствие форматирования. Я также отвечу на ваши ответы в течение нескольких часов, когда я получу доступ из другого домена.
Ответы
Ответ 1
Навигация по страницам на странице не должен выполняться с помощью POST. Для этого вы должны использовать обычные <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>
только, если вам нужно отправить форму с некоторым пользовательским вводом. Но более чем часто результат представлен только на той же странице, если это необязательно условно отображено/включено. Только на успешных отправках, которые абсолютно необходимо переходить на другую страницу (например, логин/выход из системы), вы действительно должны отправлять перенаправление. Это так называемый шаблон Post-Redirect-Get.
См. также