<h:outputLink>
отображает полноценный элемент HTML <a>
с соответствующим URL-адресом в атрибуте href
, который запускает 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-Получить шаблон ), только улучшает закладку целевой страницы, когда ссылка фактически нажата (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" />
Так что, если он предназначен для чистой и закладочной навигации между страницами, такой как имя пользователя SOссылку, затем используйте <h:outputLink>
или <h:link>
.Это также лучше для SEO, поскольку боты обычно не шифруют POST-формы и JS-код.Кроме того, UX будет улучшен, так как страницы теперь могут быть добавлены в закладки, и URL больше не будет «позади».
При необходимости вы можете выполнить предварительную обработку в конструкторе или @PostConstruct
из @RequestScoped
или @ViewScoped
@ManagedBean
, который прикреплен к соответствующей странице назначения.Вы можете использовать @ManagedProperty
или <f:viewParam>
для установки параметров GET в качестве свойств компонента.
См. Также: