Il <h:outputLink>rendering di un <a>elemento HTML pienamente valido con l'URL corretto hrefnell'attributo che genera una richiesta GET con segnalibro. Non può richiamare direttamente un metodo di azione del bean gestito.
<h:outputLink value="destination.xhtml">link text</h:outputLink>
La <h:commandLink>rende un HTML <a>elemento con uno onclickscript che invia un modulo (nascosto) POST e grado di richiamare un metodo di azione bean gestito. Deve anche essere inserito in a <h:form>.
<h:form>
<h:commandLink value="link text" action="destination" />
</h:form>
Il ?faces-redirect=trueparametro su <h:commandLink>, che attiva un reindirizzamento dopo il POST (secondo il modello Post-Redirect-Get ), migliora solo la segnalabilità della pagina di destinazione quando si fa effettivamente clic sul collegamento (l'URL non sarà più "uno dietro") , ma non cambia hrefl' <a>elemento dell'elemento in un URL completo. Rimane ancora #.
<h:form>
<h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>
A partire da JSF 2.0, esiste anche il metodo <h:link>che può richiedere un ID di visualizzazione (risultato di un caso di navigazione) anziché un URL. Genererà anche un <a>elemento HTML con l'URL corretto in href.
<h:link value="link text" outcome="destination" />
Quindi, se è per la navigazione da pagina a pagina pura e aggiungibile ai segnalibri come il collegamento del nome utente SO, quindi utilizzare <h:outputLink>o<h:link> . Questo è anche meglio per il SEO poiché i robot di solito non codificano i moduli POST né il codice JS. Inoltre, UX verrà migliorato poiché le pagine sono ora aggiungibili ai segnalibri e l'URL non è più "uno dietro".
Se necessario, è possibile eseguire il processo di preelaborazione nel costruttore o @PostConstructdi un @RequestScopedo @ViewScoped @ManagedBeanche è collegato alla pagina di destinazione in questione. È possibile utilizzare @ManagedPropertyo <f:viewParam>per impostare i parametri GET come proprietà del bean.
Guarda anche:
UICommandcomponenti devono essere inseriti in unUIFormcomponente.