h:commandbutton vs h:commandlink
Wir sind mit JSF-2.1.7 und in unser aller form post-Anfragen. Ich versuche mich zu rechtfertigen, ob <h:commandButton>
oder <h:commandLink>
. Das Aussehen der <h:commandLink>
(href <a/>
) gesteuert werden kann, mit Stil und jQuery.
Empfohlen <h:commandButton>
oder <h:commandLink>
? Gibt es irgendeinen wirklichen Vorteil?
Lesen Sie dieser. Es könnte Ihnen helfen,...
InformationsquelleAutor user684434 | 2012-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keinen funktionalen Unterschied abgesehen von den erzeugten markup und das Erscheinungsbild. Die
<h:commandButton>
generiert eine HTML -<input type="submit">
element und die<h:commandLink>
generiert eine HTML -<a>
element, das verwendet JavaScript zum Absenden des Formulars. Beide werden verwendet, um ein Formular Absenden. Zusätzliche styling ist unerheblich für die Funktionalität.Verwenden Sie die
<h:commandButton>
wenn Sie ein Einreichen Taste und verwenden Sie die<h:commandLink>
wenn Sie ein Einreichen link. Wenn das nicht machen Sinn, dann weiß ich nicht. Wenn Sie können nicht entscheiden, welche zu verwenden, wählen Sie einfach diejenige, die am meisten Sinn macht, im UI-Perspektive. Fragen Sie die web-designer, wenn Sie sich nicht sicher sind.Den Unterschied zwischen
<h:commandLink>
und<h:outputLink>
ist übrigens mehr interessant. Diese ist beantwortet worden hier im detail: Wann sollte ich h:outputLink anstelle von h:commandLink?InformationsquelleAutor BalusC
Für ein Formular, ziehe ich den h:commandbutton
h:commandbutton ist wie eine Schaltfläche in HTML, wo können Sie eine Aktion festlegen, die von einer backing-bean.
h:commandlink ist wie ein link in HTML (tag eine), wo Sie können auch die Aktion einer backing-bean
Verwenden, die css in JSF verwenden, können Sie das Attribut 'styleClass'.
InformationsquelleAutor Felipe Queiroz
Kurz, meine Empfehlung ist eine Mischung aus
<h:commandButton type="submit">
für die primäre (Standard -) senden-Schaltfläche und<h:commandLink>
s für jedes weitere Tasten (z.B. filtern, Sortieren, Suche, Vorschau, generieren, Kennwort, ...).Langwierige Erklärung folgt:
Zunächst einige Hintergrundinformationen: Man sollte wohl auch bewusst sein, die verschiedenen
<h:commandButton>
type
Attribute. (Dietype
Attribut übersetzt sich direkt in die generierte<input type="">
- Attribut.) Ich habe nicht gefunden, dies ausdrücklich überall, aber einige tests haben gezeigt, dass:type="submit"
(Standard ist dies, wenn Sie weggelassen werden) nicht den normalen "senden" - Verhalten der form (d.h., die Buchung der form) sowie dieaction
- und/oderactionListener
.type="reset"
hat den normalen "reset" - Verhalten (D. H. clearing/zurücksetzen der form-Felder), ohne Aufruf irgendeineraction
- und/oderactionListener
s.type="button"
erzeugt eine Schaltfläche (anscheinend<input type="button">
ist ein bisschen mehr begrenzt als die<button>
tag) ohne Aufruf irgendeineraction
- und/oderactionListener
s.Abgesehen von der Wiederherstellung der Felder, die beiden letzteren scheinen nützlich zu sein, nur zu aktivieren, z.B. Javascript. Sie nicht nach der form.
Also um die Frage zu beantworten: in einer form Kontext:
<h:commandButton>
(das entspricht<h:commandButton type="submit">
erinnern) ist oft nützlich, vor allem, da die meisten Browser implementieren Sie nun die Aktivierung der ersten submit-button gefunden in der DOM-Baum von der form wenn Enter gedrückt wird. Dies kann verbessern Sie Ihre form, die die Benutzer-ErfahrungE. g. es ist etwas schneller anmelden mit:
im Gegensatz zu
Beachten Sie auch, dass jede
<input>
Tasten (Optional CSS-Stil) noch erreicht werden kann über die Tastatur, indem Sie Tabing, bis die<a>
(CSS-styled wie eine Schaltfläche), die den Fokus hat, und dann Leertaste,.<h:commandLink>
wäre eher angebracht. Dieses noch erreicht werden kann über die Tastatur, indem Sie Tabing, bis die<a>
(CSS-styled wie eine Schaltfläche), die den Fokus hat, und dann Enter. Hinweis, dass dies unvereinbar ist mit den Tasten erzeugt mit<h:commandButton>
, die möglicherweise CSS-gestylt Aussehen identisch, aber anders behandelt werden durch den browser (Tab...Leertaste,).Das ist die Allgemeine Erklärung, ABER es gibt einige Probleme, die Sie vielleicht beachten sollten,...
Wenn Sie nicht über eine
<h:commandButton type="submit">
Schaltfläche auf einem Formular, nur ein<h:commandLink>
- Taste (oder auch gar keine Taste mehr an), wenn der Benutzer die Taste Enter das Formular wird trotzdem abgeschickt, aber ohne den Vorteil eineraction{Listener}
läuft. Die möglicherweise nicht zu groß ein problem, wie das Formular die Werte gespeichert, die in der backing-bean und wieder angezeigt, wenn die Seite geladen wird, also mal abgesehen von den server-roundtrip wird der Benutzer oft nicht bemerken, dass etwas nicht in Ordnung ist. Aber das könnte nicht sein, wie Sie wollen, Enter, um behandelt werden.... Die einzige Möglichkeit die ich denken kann, im moment zu umgehen, istonSubmit
- Ereignis im Formular, die Ihr Standard -<h:commandLink>
- button via Javascript.... Arghhhh!!Sollten Sie auch sicherstellen, dass Ihre CSS-Selektoren sound.
A.mystyle
angewendet wird<h:commandLink>
;INPUT[type=submit].mystyle
zu<h:commandButton type="submit">
;INPUT[type=reset].mystyle
zu<h:commandButton type="reset">
;INPUT[type=button].mystyle
zu<h:commandButton type="button">
;Diese kann natürlich sein, verbunden mit einem Komma als Selektor für ein einzelnes style-definition. Oder, wenn Sie wollen, um das Risiko von etwas anderem sein gestylt wie ein mystyle - Taste, Sie könnte das auslassen der
A
/INPUT
Planern. Allerdings habe ich stylte meine buttons da oben, damit könnte ich auch dieses verwenden:SPAN.mystyle
definition, wenn Sie den link bzw. die Schaltfläche ist deaktiviert (z.B. über diedisabled
Attribut) - dies ermöglicht die Versorgung einer getönten-down (Grau) suchen eine deaktivierte Taste.Habe ich auch einige Höhenunterschiede (line-height auf den Button vs. Inhalt Höhe auf den Link - das kann ein problem sein, wenn dein button mit einem hintergrund-Bild als icon statt text), und auch einige leichte Unterschiede, wie die
:before
/:after
pseudoclasses behandelt werden. Alles was ich sage: testen und testen Sie Ihre CSS auf beiden<h:commandButton>
s und<h:commandLink>
s um sicherzustellen, dass Sie Aussehen (im wesentlichen) dasselbe!Hier ist meine Zusammenfassung cheat sheet:
<input type="submit">
versus<a href="#" onclick="form.submit()">
und nicht<h:commandButton>
versus<h:commandLink>
.Schuldig, wie aufgeladen, Bauke. Ich bin versucht zu lenken, Weg von meinem alten umständliche Wege nehmen Menschen die Worte streng wörtlich - es schien mir, die Frage war mehr über die praktische verwenden, die einer gegen den anderen, und JSF hinterlässt einen unerfahrenen user den Eindruck, dass es abstracts, die Weg von HTML, das nicht unbedingt der Fall, zum Glück und/oder Verdruss. Für was es Wert ist auf eine 3 Jahre alte Frage.... Die Fokussierung auf die HTML-Funktionalität Seite könnte oder nicht, trifft die Frage das Ziel, aber ich denke, Ihre Antwort deckt, dass das JSF-Funktionalität Seite gut, nicht wiederholt werden müssen.
Ein dickes Lob für die Mühe dennoch.
InformationsquelleAutor fr13d
Mich korrigieren, wenn ich falsch bin, aber der erste Unterschied zwischen beiden ist die Tatsache, dass
<h:commandButton>
braucht nicht JavaScript aktiviert sein im browser. Wenn Ihre Webseite ist JS schwere, dann können Sie<h:commandLink>
, sonst ist es besser, ihn zu behalten JS frei, falls Ihre Benutzer verwenden möchte, sth, wie der Tor-Browser ein, und Sie sind ok mit ihm.Das zweite ist, wie diese beiden Verhalten sich in einer Webseite. Die
<h:commandLink>
wird nur das tun, was er tun soll oder manchmal auch Feuer eine Methode aus backing-bean, hat@PostConstruct
annotation.Während
<h:commandButton>
können auch Feuer-inline-Javascripte, die führen können zu brennen andere Methoden aus backing-bean. Es wird jedoch auch automatisch die Ansicht aktualisiert.InformationsquelleAutor Apollo