Ich habe im Internet gesucht und kann keine Liste von <p:ajax>
Veranstaltungen. Kann jemand eine vollständige Liste der Ereignisse für die <p:ajax>
Etikett?
Mich interessiert besonders, ob es ein onblur
-Ereignis oder ähnliches gibt.
Sie können nach "Ajax-Verhaltensereignissen" in PrimeFaces-Benutzerhandbuch suchen, und Sie finden viele davon für alle unterstützten Komponenten . Dies ist auch das, was PrimeFaces-Chef Optimus Prime in dieser verwandten Frage im PrimeFaces-Forum vorschlägt <p:ajax>
Ereignisliste?
Es gibt kein onblur
-Ereignis, das ist der HTML-Attributname, aber es gibt ein blur
-Ereignis. Es ist nur ohne das Präfix "on" wie als HTML-Attributname. Sie können auch alle "on *" - Attribute der Tag-Dokumentation der betreffenden Komponente prüfen, um festzustellen, welche verfügbar sind, z. <p:inputText>
.
Unter "JavaScript HTML DOM-Ereignisse" finden Sie eine allgemeine Übersicht über Ereignisse:
http://www.w3schools.com/jsref/dom_obj_event.asp
PrimeFaces basiert auf jQuery. Hier ist die Dokumentation zu jQuery "Events":
http://api.jquery.com/category/events/
http://api.jquery.com/category/events/form-events/
http://api.jquery.com/category/events/keyboard-events/
http://api.jquery.com/category/events/mouse-events/
http://api.jquery.com/category/events/browser-events/
Nachfolgend habe ich einige der am häufigsten auftretenden Ereignisse aufgelistet und Kommentare dazu, wo sie verwendet werden können (aus der jQuery-Dokumentation entnommen).
Mausereignisse
(Jedes HTML-Element kann diese Ereignisse empfangen.)
click
dblclick
mousedown
mousemove
mouseover
mouseout
mouseup
Tastaturereignisse
(Diese Ereignisse können an jedes Element angehängt werden, aber das Ereignis wird nur an das Element gesendet, das den Fokus hat. Fokussierbare Elemente können zwischen den Browsern variieren, Formularelemente können jedoch immer den Fokus erhalten, sodass dies sinnvolle Kandidaten für diese Ereignistypen sind.)
keydown
keypress
keyup
Formularereignisse
blur
(In den letzten Browsern wurde die Domäne des Ereignisses um alle Elementtypen erweitert.)
change
(Dieses Ereignis ist auf <input>
- Elemente, <textarea>
- Felder und <select>
- Elemente beschränkt.)
focus
(Dieses Ereignis gilt implizit für eine begrenzte Anzahl von Elementen, z. B. Formularelemente (<input>
, <select>
usw.) und Links (<a href>
). In neueren Browserversionen kann das Ereignis durch explizites Setzen der Eigenschaft tabindex des Elements auf alle Elementtypen erweitert werden. Ein Element kann über Tastaturbefehle wie die Taste Tab oder durch Mausklicks auf das Element den Fokus erhalten.)
select
(Dieses Ereignis ist auf die Felder <input type="text">
und <textarea>
beschränkt.)
submit
(Kann nur an <form>
- Elemente angehängt werden.)
Leider sind Ajax-Ereignisse schlecht dokumentiert und ich habe keine umfassende Liste gefunden. Zum Beispiel listet User Guide v. 3.5 das Ereignis itemChange für p:autoComplete
Auf, vergisst jedoch, das Ereignis change zu erwähnen.
Wenn Sie herausfinden möchten, welche Ereignisse unterstützt werden:
SelectOneMenu
sind beispielsweise in forms.js definiert).this.cfg.behaviors
- ReferenzenIn diesem Abschnitt wird beispielsweise das toggleSelect -Ereignis in der SelectCheckboxMenu
-Komponente gestartet:
fireToggleSelectEvent: function(checked) {
if(this.cfg.behaviors) {
var toggleSelectBehavior = this.cfg.behaviors['toggleSelect'];
if(toggleSelectBehavior) {
var ext = {
params: [{name: this.id + '_checked', value: checked}]
}
}
toggleSelectBehavior.call(this, null, ext);
}
},
Schedule bietet verschiedene Ajax-Verhaltensereignisse, um auf Benutzeraktionen zu reagieren.
hier finden Sie weitere Informationen https://www.primefaces.org/docs/guide/primefaces_user_guide_5_0.pdf
Ich habe die Liste im Debug-Modus; zuerst habe ich den punkt gesehen, an dem der fehler geworfen wurde
javax.faces.view.facelets.TagException: /showcase/partial_submit.xhtml @ 26,36 Ereignis: geändert wird nicht unterstützt. org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.applyAttachedObject (AjaxBehaviorHandler.Java:179) org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.apply (AjaxBehaviorHandler.Java:157)
und dann habe ich AjaxBehaviorHandler getestet
wenn Sie also die richtige Liste der unterstützten Ereignisse ermitteln möchten, können Sie einen Fehler generieren (unter Verwendung eines falschen Ereignisnamens) und auf diese Weise vorgehen
Da die Liste der möglichen Ereignisse nicht an p:ajax
Selbst gebunden ist, sondern an die Komponente, mit der sie verwendet wird, müssen Sie die Komponente fragen, für welche Ajax-Ereignisse sie unterstützt.
Es gibt mehrere Möglichkeiten, die Ajax-Ereignisse für eine bestimmte Komponente zu bestimmen:
1) Fragen Sie die Komponente in xhtml:
Sie können die Liste direkt in xhtml ausgeben, indem Sie diese Komponente an eine Variable mit Anforderungsbereich binden und die Eigenschaft eventNames
drucken:
<p:autoComplete binding="#{ac}"></p:autoComplete>
<h:outputText value="#{ac.eventNames}" />
Dies gibt aus
[blur, change, valueChange, click, dblclick, focus, keydown, keypress, keyup,
mousedown, mousemove, mouseout, mouseover, mouseup, select, itemSelect,
itemUnselect, query, moreText, clear]
2) Fragen Sie die Komponente in Java code:
Finden Sie die Implementierungsklasse der Komponente heraus und rufen Sie deren Implementierung der Methode javax.faces.component.UIComponentBase.getEventNames()
auf:
import javax.faces.component.UIComponentBase;
public class SomeTest {
public static void main(String[] args) {
dumpEvents(new org.primefaces.component.inputtext.InputText());
dumpEvents(new org.primefaces.component.autocomplete.AutoComplete());
dumpEvents(new org.primefaces.component.datatable.DataTable());
}
private static void dumpEvents(UIComponentBase comp) {
System.out.println(
comp + ":\n\tdefaultEvent: " + comp.getDefaultEventName() + ";\n\tEvents: " + comp.getEventNames());
}
}
Dies gibt aus:
[email protected]:
defaultEvent: valueChange;
Events: [blur, change, valueChange, click, dblclick, focus, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, mouseup, select]
[email protected]:
defaultEvent: valueChange;
Events: [blur, change, valueChange, click, dblclick, focus, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, mouseup, select, itemSelect, itemUnselect, query, moreText, clear]
[email protected]:
defaultEvent: null;
Events: [rowUnselect, colReorder, tap, rowEditInit, toggleSelect, cellEditInit, sort, rowToggle, cellEdit, rowSelectRadio, filter, cellEditCancel, rowSelect, contextMenu, taphold, rowReorder, colResize, rowUnselectCheckbox, rowDblselect, rowEdit, page, rowEditCancel, virtualScroll, rowSelectCheckbox]
) 'rtfm' ;-)
Die beste Möglichkeit besteht darin, in die Dokumentation der jeweiligen verwendeten Komponente zu schauen, wie sie von den Komponentenentwicklern bereitgestellt wird, und nicht nur in PrimeFaces. (p:ajax
Kann an jede Komponente angehängt werden, die Ajax-Verhalten bietet.).
Der Vorteil gegenüber früheren Vorschlägen besteht darin, dass die Dokumentation nicht nur die Ereignisnamen enthält, sondern auch eine erweiterte Beschreibung des Ereignisses, die möglicherweise mit einer Ereignistypklasse angereichert ist, die von einem Listener abgefangen werden kann.
Zum Beispiel das org.primefaces.event.SelectEvent
Im Fall von
<p:ajax event="itemSelect" listener="#{anyBean.onItemSelect}"/>
die Signatur der Listener-Methode public void onItemSelect(SelectEvent)
stellt zusätzliche kontextbezogene Ereignisdaten bereit.
Wenn es in der PrimeFaces-Dokumentation keine explizite Liste von Ajax-Ereignissen auf einem Compoment gibt, kann die Liste der Rückrufe bei * Javascript als Ereignis verwendet werden, indem das "Ein" entfernt und der Rest als Ereignisname verwendet wird. Die anderen Antworten in dieser Frage bieten auch Hilfe zu diesen einfachen Dom-Ereignissen.