Когда я должен использовать h:outputLink вместо h: commandLink?
когда я должен использовать <h:outputLink> вместо <h:commandLink>?
Я понимаю, что a commandLink генерирует сообщение HTTP; я предполагаю, что outputLink будет генерировать HTTP-методов get. Тем не менее, большинство JSF учебник материал я читал использует commandLink (практически?) исключительно.
контекст: я реализую небольшой демонстрационный проект, который показывает ссылку заголовка на страницу пользователя, так же, как переполнение стека...
...и я не уверен, если commandLink (возможно, с использованием ?faces-redirect=true для закладки) или outputLink - это правильный выбор.
2 ответа:
The
<h:outputLink>выводит полноценный HTML<a>элемент с правильным URL вhrefатрибут, который запускает bookmarkable GET запрос. Он не может напрямую вызывать метод действия управляемого компонента.<h:outputLink value="destination.xhtml">link text</h:outputLink>
The
<h:commandLink>отображает HTML<a>элементonclickскрипт, который отправляет (скрытую) форму POST и может вызывать управляемый метод действия bean. Он также должен быть помещен внутрь<h:form>.<h:form> <h:commandLink value="link text" action="destination" /> </h:form>The на
<h:commandLink>, который вызывает перенаправление после сообщения (согласно Post-Redirect-Get pattern), только улучшает закладки целевой страницы, когда ссылка фактически нажата (URL больше не будет" один позади"), но это не меняетhrefна<a>элемент, чтобы быть полноценным URL. Он все еще остается#.<h:form> <h:commandLink value="link text" action="destination?faces-redirect=true" /> </h:form>
начиная с JSF 2.0, есть также
<h:link>который может принимать идентификатор представления (результат навигационного случая) вместо URL. Он будет генерировать HTML -<a>элемент, а также с правильным URL-адрес вhref.<h:link value="link text" outcome="destination" />
так, если это чисто и можно сделать закладку страницы на страницу навигации, как так ссылке имя пользователя, а затем использовать
<h:outputLink>или<h:link>. Это также лучше для SEO, так как боты обычно не шифруют почтовые формы и JS-код. Кроме того, UX будет улучшен, так как страницы теперь являются заметными и URL это больше не" один позади".при необходимости можно выполнить задание предварительной обработки в конструкторе или
@PostConstructна@RequestScopedили@ViewScoped@ManagedBeanкоторый прикреплен к целевой странице в вопросе. Вы можете использовать@ManagedPropertyили<f:viewParam>для установки параметров GET в качестве свойств компонента.Читайте также: