<h:outputLink>
Оказывает fullworthy HTML <a>
элемент с соответствующей URL в href
атрибуте , который выстреливает запрос bookmarkable GET. Он не может напрямую вызывать метод действия управляемого компонента.
<h:outputLink value="destination.xhtml">link text</h:outputLink>
<h:commandLink>
Оказывает HTML - <a>
элемент с onclick
скрипт , который отправляет форму (скрытый) POST и может вызвать метод управляемого компонента действия. Его также необходимо разместить внутри файла <h:form>
.
<h:form>
<h:commandLink value="link text" action="destination" />
</h:form>
?faces-redirect=true
Параметр на <h:commandLink>
, который запускает перенаправление после POST (в соответствии с Post-Redirect-Get шаблона), только улучшает bookmarkability целевой страницы , когда связь на самом деле нажата (URL - адрес не будет «один за» больше) , но это не меняет href
от <a>
элемента , чтобы быть fullworthy 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" />
Итак, если это для простой и удобной навигации от страницы к странице, такой как ссылка имени пользователя SO, используйте <h:outputLink>
или <h:link>
. Это также лучше для SEO, поскольку боты обычно не шифруют ни POST-формы, ни JS-код. Кроме того, UX будет улучшен, так как страницы теперь можно добавлять в закладки, а URL-адрес больше не «на один позади».
При необходимости вы можете выполнить предварительную обработку в конструкторе или @PostConstruct
в @RequestScoped
или, @ViewScoped
@ManagedBean
который прикреплен к рассматриваемой целевой странице. Вы можете использовать @ManagedProperty
или <f:viewParam>
установить параметры GET как свойства bean-компонента.
Смотрите также:
UICommand
компонент должны входить толькоUIForm
компоненты.h:outputLink
илиh:link
для них. SEO не следует недооценивать. Кстати, для хороших URL-адресов, подобных REST, как здесь, на SO, взгляните на PrettyFaces .h:link
идентификатор представления JSF (напримерpage
), а в качестве значенияh:outputLink
- реальный URL-адрес (например,/page.xhtml
или/page.jsf
или другое в зависимости отFacesServlet
сопоставления). Кодирование URL-адреса происходит в любом случае в обоих случаях. Между прочим, нет никакой разницы между поведением рендеринга EL в тексте шаблона#{...}
иh:outputText
. Оба экранируют предопределенные объекты XML (нет, это не то же самое, что кодирование URL). Вh:outputText
только предложения больше attribtues нравитсяid
,styleClass
и т.д. , чтобы управлять компонентом и / или разметки.<a>
элемент HTML , ничегоЯ также вижу, что загрузка страницы (производительность) занимает много времени при использовании h: commandLink, чем h: link. h: ссылка быстрее по сравнению с h: commandLink
источник