Quand dois-je utiliser h:outputLink au lieu de H: commandLink?

Quand dois-je utiliser un <h:outputLink> au lieu d'un <h:commandLink> ?

je comprends qu'un commandLink génère un post HTTP; je devine que outputLink générera des get HTTP. Cela dit, la plupart du tutoriel JSF j'ai lu utilise commandLink (presque?) exclusivement.

contexte: je suis en train de mettre en œuvre un petit projet de démonstration qui montre un lien d'en-tête vers une page utilisateur, un peu comme des débordements de pile...

needs more jquery

...et je ne suis pas sûr que commandLink (peut-être en utilisant ?faces-redirect=true pour bookmarkability) ou outputLink soit le bon choix.

125
demandé sur BalusC 2010-11-30 22:30:59

2 réponses

l'élément <h:outputLink> rend un élément HTML <a> fullworthy avec L'URL appropriée dans l'attribut href qui lance une requête "GET". Elle ne peut pas invoquer directement une méthode d'action bean gérée.

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

le <h:commandLink> rend un élément HTML <a> avec un script onclick qui soumet un formulaire de courrier (caché) et peut invoquer un managed bean méthode d'action. Il doit également être placé à l'intérieur d'un <h:form> .

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

le paramètre ?faces-redirect=true sur le <h:commandLink> , qui déclenche une redirection après le POST( selon le modèle Post-Redirect-Get ), n'améliore la bookmarkabilité de la page cible que lorsque le lien est cliqué (L'URL ne sera plus" one behind"), mais il ne change pas le href de l'élément <a> pour être un fullworthy URL. Il reste encore # .

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

depuis JSF 2.0, Il y a aussi le <h:link> qui peut prendre un ID de vue (un résultat de cas de navigation) au lieu d'une URL. Il générera un élément HTML <a> ainsi que l'URL appropriée dans href .

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

donc, si c'est pour la navigation pure et bookmarkable page-à-Page comme le lien SO username, puis utiliser <h:outputLink> ou <h:link> . C'est aussi mieux pour le référencement car les bots n'encodent généralement pas les formulaires postaux ni le code JS. Aussi, UX sera améliorée puisque les pages sont maintenant bookmarkable et l'URL n'est pas "derrière".

si nécessaire, vous pouvez effectuer le prétraitement dans le constructeur ou @PostConstruct d'un @RequestScoped ou @ViewScoped @ManagedBean qui est joint à la page de destination en question. Vous pouvez faire usage de @ManagedProperty ou <f:viewParam> pour définir les paramètres GET comme des propriétés du bean.

voir aussi:

184
répondu BalusC 2017-05-23 11:33:26

je vois aussi que le chargement de page (performance) prend beaucoup de temps à utiliser h:commandLink plutôt que h:link. h: link est plus rapide que H: commandLink

4
répondu Ashok 2011-06-20 18:38:16