El <h:outputLink>
haga que el HTML fullworthy <a>
elemento con la URL apropiada en el href
atributo que dispara una petición GET bookmarkable. No puede invocar directamente un método de acción de bean gestionado.
<h:outputLink value="destination.xhtml">link text</h:outputLink>
El <h:commandLink>
haga que el HTML <a>
elemento con un onclick
script que envía un formulario (oculto) POST y puede invocar un método de acción bean gestionado. También se requiere que se coloque dentro de a <h:form>
.
<h:form>
<h:commandLink value="link text" action="destination" />
</h:form>
El ?faces-redirect=true
parámetro en <h:commandLink>
, que activa una redirección después de la POST (según el patrón Post-Redirect-Get ), solo mejora la posibilidad de marcar la página de destino cuando se hace clic en el enlace (la URL ya no estará "uno detrás") , pero no cambia href
el <a>
elemento para que sea una URL digna de confianza. Aún permanece #
.
<h:form>
<h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>
Desde JSF 2.0, también existe el <h:link>
que puede tomar una ID de vista (un resultado de caso de navegación) en lugar de una URL. También generará un <a>
elemento HTML con la URL adecuada href
.
<h:link value="link text" outcome="destination" />
Entonces, si se trata de una navegación de página a página pura y marcable como el enlace de nombre de usuario 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, se mejorará UX ya que las páginas ahora se pueden marcar y la URL ya no es "una detrás".
Cuando sea necesario, puede hacer el trabajo de preprocesamiento en el constructor o @PostConstruct
de un @RequestScoped
o @ViewScoped
@ManagedBean
que está adjunto a la página de destino en cuestión. Puede utilizar @ManagedProperty
o <f:viewParam>
establecer parámetros GET como propiedades de bean.
Ver también:
UICommand
componentes deben ir en unUIForm
componente.