Das <h:outputLink>
rendert ein vollwertiges HTML- <a>
Element mit der richtigen URL im href
Attribut, wodurch eine mit Lesezeichen versehene GET-Anforderung ausgelöst wird . Es kann keine verwaltete Bean-Aktionsmethode direkt aufrufen.
<h:outputLink value="destination.xhtml">link text</h:outputLink>
Das <h:commandLink>
rendert ein HTML- <a>
Element mit einem onclick
Skript, das ein (verstecktes) POST-Formular sendet und eine verwaltete Bean-Aktionsmethode aufrufen kann. Es muss auch in einem platziert werden <h:form>
.
<h:form>
<h:commandLink value="link text" action="destination" />
</h:form>
Der ?faces-redirect=true
Parameter auf dem <h:commandLink>
, der nach dem POST eine Umleitung auslöst (gemäß dem Post-Redirect-Get- Muster), verbessert die Lesezeichenfähigkeit der Zielseite nur, wenn tatsächlich auf den Link geklickt wird (die URL wird nicht mehr "eins dahinter" sein). , aber es ändert nichts href
von dem <a>
Element, um eine vollwertige URL zu sein. Es bleibt immer noch #
.
<h:form>
<h:commandLink value="link text" action="destination?faces-redirect=true" />
</h:form>
Seit JSF 2.0 gibt es auch <h:link>
eine Ansichts-ID (ein Navigationsfallergebnis) anstelle einer URL. Es wird auch ein HTML- <a>
Element mit der richtigen URL in generiert href
.
<h:link value="link text" outcome="destination" />
Wenn es sich also um eine reine und mit Lesezeichen versehene Navigation von Seite zu Seite handelt, wie z. B. den SO-Benutzernamen-Link, verwenden Sie <h:outputLink>
oder <h:link>
. Das ist auch besser für SEO, da Bots normalerweise weder POST-Formulare noch JS-Code verschlüsseln. Außerdem wird UX verbessert, da die Seiten jetzt mit Lesezeichen versehen werden können und die URL nicht mehr "eins dahinter" ist.
Bei Bedarf können Sie die Vorverarbeitungsaufgabe im Konstruktor oder @PostConstruct
eines @RequestScoped
oder @ViewScoped
@ManagedBean
ausführen, das an die betreffende Zielseite angehängt ist. Sie können GET-Parameter als Bean-Eigenschaften verwenden @ManagedProperty
oder <f:viewParam>
festlegen.
Siehe auch:
UICommand
In einerUIForm
Komponente müssen nur Komponenten enthalten sein.