Я искал Интернет, и я не могу найти список событий <p:ajax>
. Может ли кто-либо предоставить полный список событий для тега <p:ajax>
?
Мне особенно интересно, есть ли событие onblur
или что-то подобное.
Я искал Интернет, и я не могу найти список событий <p:ajax>
. Может ли кто-либо предоставить полный список событий для тега <p:ajax>
?
Мне особенно интересно, есть ли событие onblur
или что-то подобное.
Вы можете найти "События поведения Ajax" в Руководство пользователя PrimeFaces, и вы найдете много их для всех поддерживаемых компонентов. То, что PrimeFaces предлагает Optimus Prime предложить сделать в этом связанном вопросе на форуме PrimeFaces <p:ajax>
список событий?
Нет события onblur
, что имя атрибута HTML, но есть событие blur
. Он просто без префикса "on", как имя атрибута HTML. Вы также можете просмотреть все атрибуты "on *" в документации тега данного компонента, чтобы узнать, какие из них доступны, например. <p:inputText>
.
Вы можете посмотреть "JavaScript HTML DOM Events" для общего обзора событий:
http://www.w3schools.com/jsref/dom_obj_event.asp
PrimeFaces построен на jQuery, поэтому здесь jQuery "События":
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/
Ниже перечислены некоторые из наиболее распространенных событий с комментариями о том, где их можно использовать (взято из документации jQuery).
События мыши
(Любой элемент HTML может принимать эти события.)
click
dblclick
mousedown
mousemove
mouseover
mouseout
mouseup
События клавиатуры
(Эти события могут быть привязаны к любому элементу, но событие отправляется только элементу, который имеет фокус. Фокусируемые элементы могут различаться между браузерами, но элементы формы всегда могут получить фокус, поэтому разумные кандидаты для этих типов событий. )
keydown
keypress
keyup
События формы
blur
(В последних браузерах домен события был расширен для включения всех типов элементов.)
change
(Это событие ограничено <input>
элементами, <textarea>
и <select>
).
focus
(Это событие неявно применимо к ограниченному набору элементов, таких как элементы формы (<input>
, <select>
и т.д.) и ссылки (<a href>
). В последних версиях браузера событие может быть расширен, чтобы включать все типы элементов, явно устанавливая свойство tabindex элемента. Элемент может получить фокус с помощью команд клавиатуры, таких как клавиша Tab или щелчки мышью на элементе.)
select
(Это событие ограничено полями <input type="text">
и <textarea>
).
submit
(Его можно привязать только к элементам <form>
.)
К сожалению, события Ajax плохо документированы, и я не нашел исчерпывающего списка. Например, в Руководстве пользователя v. 3.5 перечислены события itemChange для p:autoComplete
, но забывается, чтобы отметить событие изменения.
Если вы хотите узнать, какие события поддерживаются:
SelectOneMenu
, определены в forms.js)this.cfg.behaviors
ссылокНапример, этот раздел отвечает за запуск функции toggleSelect в компоненте SelectCheckboxMenu
:
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);
}
},
Расписание предоставляет различные события поведения ajax для ответа на действия пользователя.
здесь больше https://www.primefaces.org/docs/guide/primefaces_user_guide_5_0.pdf
У меня есть список в режиме отладки; сначала я увидел точку, в которой была выброшена ошибка
javax.faces.view.facelets.TagException:/showcase/partial_submit.xhtml @26,36 Событие: изменено не поддерживается. org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.applyAttachedObject(AjaxBehaviorHandler.java:179) org.primefaces.component.behavior.ajax.AjaxBehaviorHandler.apply(AjaxBehaviorHandler.java:157)
а затем я отлаживал AjaxBehaviorHandler
поэтому, если вы хотите найти правильный список поддерживаемых событий, вы можете сгенерировать ошибку (используя неправильное имя события) и следовать этому пути
Поскольку список возможных событий связан не с самим p:ajax
, а с компонентом, с которым он используется, вам придется спросить компонент, для каких событий ajax он поддерживает.
Существует несколько способов определения событий ajax для данного компонента:
1) Спросите компонент в xhtml:
Вы можете вывести список напрямую в xhtml, связав этот компонент с переменной области запроса и напечатав свойство eventNames
:
<p:autoComplete binding="#{ac}"></p:autoComplete>
<h:outputText value="#{ac.eventNames}" />
Это выводит
[blur, change, valueChange, click, dblclick, focus, keydown, keypress, keyup,
mousedown, mousemove, mouseout, mouseover, mouseup, select, itemSelect,
itemUnselect, query, moreText, clear]
2) Запросите компонент в коде Java:
Выясните класс реализации компонента и вызовите его реализацию метода javax.faces.component.UIComponentBase.getEventNames()
:
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());
}
}
Это выводит:
[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]
3) 'rtfm' ;-)
Лучший вариант - изучить документацию конкретного используемого компонента, которая, как мы надеемся, предоставляется разработчиками компонентов, не ограничиваясь, например, PrimeFaces. (p:ajax
может быть присоединен к любому компоненту, обеспечивающему поведение Ajax).
Преимущество по сравнению с предыдущими предложениями состоит в том, что документация не только предоставляет имена событий, но также и расширенное описание события, потенциально обогащенного классом типа события, который может быть перехвачен слушателем.
Например, org.primefaces.event.SelectEvent
в случае
<p:ajax event="itemSelect" listener="#{anyBean.onItemSelect}"/>
и подпись метода прослушивателя public void onItemSelect(SelectEvent)
предоставляет дополнительные контекстные данные события.
В тех случаях, когда в документации PrimeFaces нет явного списка событий ajax на компосте, список обратных вызовов on * javascript можно использовать в качестве событий, удалив "on" и используя остаток в качестве имени события. Другие ответы на этот вопрос также помогают справиться с этими простыми событиями.