jsfcljs jsf jsf-2

jsfcljs - commandlink primefaces href



¿Cuándo debería usar h: outputLink en lugar de h: commandLink? (2)

¿Cuándo debería usar un <h:outputLink> lugar de un <h:commandLink> ?

Entiendo que un commandLink genera una publicación HTTP; Supongo que outputLink generará HTTP obtiene. Dicho esto, la mayor parte del material del tutorial de JSF que he leído usa commandLink (¿casi?) Exclusivamente.

Contexto: estoy implementando un pequeño proyecto de demostración que muestra un enlace de encabezado a una página de usuario, muy parecido al de Stack Overflow ...

... y no estoy seguro si commandLink (quizás usando ?faces-redirect=true para bookmarkability) o outputLink es la elección correcta.


El <h:outputLink> representa un elemento HTML <a> completo con la URL adecuada en el atributo href que activa una solicitud GET marcable. No puede invocar directamente un método de acción de frijol administrado.

<h:outputLink value="destination.xhtml">link text</h:outputLink>

El <h:commandLink> representa un elemento HTML <a> con un script onclick que envía un formulario POST (oculto) y puede invocar un método de acción de bean administrado. También se requiere que se coloque dentro de una <h:form> .

<h:form> <h:commandLink value="link text" action="destination" /> </h:form>

El parámetro <h:commandLink> ?faces-redirect=true en el <h:commandLink> , que desencadena una redirección después de la POST (según el patrón Post-Redirect-Get ), solo mejora la marcabilidad de la página de destino cuando se hace clic en el enlace (el La URL ya no estará "una detrás"), pero no cambia el href del elemento <a> para ser una URL completa. Todavía permanece # .

<h:form> <h:commandLink value="link text" action="destination?faces-redirect=true" /> </h:form>

Desde JSF 2.0, también está el <h:link> que puede tomar una ID de vista (un resultado de caso de navegación) en lugar de una URL. <a> elemento HTML <a> con la URL adecuada en href .

<h:link value="link text" outcome="destination" />

Por lo tanto, si se trata de una navegación de página a página pura y <h:outputLink> como el enlace de nombre de usuario de SO, entonces use <h:outputLink> o <h:link> . Eso también es mejor para SEO ya que los bots generalmente no cifran los formularios POST ni el código JS. Además, UX se mejorará ya que las páginas ahora son favoritas y la URL ya no está "una detrás".

Cuando sea necesario, puede realizar el trabajo de preprocesamiento en el constructor o @PostConstruct de @RequestScoped o @ViewScoped que se adjunta a la página de destino en cuestión. Puede utilizar @ManagedProperty o <f:viewParam> para establecer los parámetros GET como propiedades de bean.

Ver también:


También veo que la carga de página (rendimiento) lleva mucho tiempo usando h: commandLink than h: link. h: el enlace es más rápido en comparación con h: commandLink