Il <h:outputLink>
rendering di un <a>
elemento HTML pienamente valido con l'URL corretto href
nell'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 onclick
script 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=true
parametro 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 href
l' <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 @PostConstruct
di un @RequestScoped
o @ViewScoped
@ManagedBean
che è collegato alla pagina di destinazione in questione. È possibile utilizzare @ManagedProperty
o <f:viewParam>
per impostare i parametri GET come proprietà del bean.
Guarda anche:
UICommand
componenti devono essere inseriti in unUIForm
componente.