Когда я должен использовать h:outputLink вместо h: commandLink?


когда я должен использовать <h:outputLink> вместо <h:commandLink>?

Я понимаю, что a commandLink генерирует сообщение HTTP; я предполагаю, что outputLink будет генерировать HTTP-методов get. Тем не менее, большинство JSF учебник материал я читал использует commandLink (практически?) исключительно.

контекст: я реализую небольшой демонстрационный проект, который показывает ссылку заголовка на страницу пользователя, так же, как переполнение стека...

...и я не уверен, если commandLink (возможно, с использованием ?faces-redirect=true для закладки) или outputLink - это правильный выбор.

2 125

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 в качестве свойств компонента.

Читайте также:

Я также вижу, что загрузка страницы (производительность) занимает много времени при использовании h:commandLink, чем h:link. H: ссылка быстрее по сравнению с h: commandLink