Когда я должен использовать 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 в качестве свойств компонента.Читайте также: