18.4. AjaxAction事件

AjaxAction事件是对动作事件的扩展和补充。请考虑这样的情景:当w:dataGrid的某个格子被选中时,我们希望知道用户选取了哪个格子并进行相应的处理,这个需求用前面几种事件是无法直接解决的。而AjaxAction事件则能很好地解决这类问题。我们可以为构件添加客户端事件监听器,当构件产生相应客户端事件时,发送一个Ajax请求到后台调用指定的服务器方法。OperaMasks中有一个专门的构件用来满足此类需求,如下

<w:form>
    <w:dataGrid id="grid" selectionModel="new org.operamasks.faces.component.grid.CellSelectionModel()">
        <ajax:action event="oncellselect" action="#{bean.doCellSelect }"></ajax:action>
    </w:dataGrid>
</w:form>

那么,当dataGrid的CellSelect事件发生时,就会调用后台bean的doCellSelect方法。OperaMasks还提供了IoVC方式为构件添加AjaxAction,详细请参看第 20 章 IoVC一节。从OperaMasks2.3版本开始,对AjaxAction事件处理机制做了扩展,所有的AjaxAction都支持无form提交。如果触发事件的构件实现了AjaxActionSupport接口,那么AjaxAction事件的处理有以下特性

下表是实现了AjaxActionSupport接口的构件和对应的一些强类型事件。

表 18.1. 实现AjaxActionSupport接口的构件

实现AjaxActionSupport接口的构件构件支持的客户端事件构件支持的强类型事件类
w:dataGridonselectionchange, onrowselect, onrowdeselect, ondblclick, oncellselectRowSelectEvent, RowDeselectEvent, RowDblClick, CellSelectEvent
w:editDataGridonselectionchange, onrowselect, onrowdeselect, ondblclick, oncellselectRowSelectEvent, RowDeselectEvent, RowDblClick, CellSelectEvent
w:treeonclick, oncheck, oncollapsenode, onexpandnode, onselectTreeNodeEvent(所有事件都可用此事件类)
w:textFieldonfocus, onblur, onkeyup, onkeydown, onkeypress, onchange, ondisable, onenable, onshow, onhideFieldChangeEvent(对应onchange事件)
w:checkBoxonfocus, onblur, onkeyup, onkeydown, onkeypress, onchange, ondisable, onenable, onshow, onhide, oncheckFieldChangeEvent(对应onchange事件),CheckEvent(对应oncheck事件)
w:calcNumberFieldonfocus, onblur, onkeyup, onkeydown, onkeypress, onchange, ondisable, onenable, onshow, onhideFieldChangeEvent(对应onchange事件)
w:numberFieldonfocus, onblur, onkeyup, onkeydown, onkeypress, onchange, ondisable, onenable, onshow, onhideFieldChangeEvent(对应onchange事件)
w:textAreaonfocus, onblur, onchange, ondisable, onenable, onshow, onhideFieldChangeEvent(对应onchange事件)
w:comboonfocus, onblur, onchange, ondisable, onenable, onshow, onhide,onexpand,oncollapse,onselectFieldChangeEvent(对应onchange事件),SelectionChangedEvent(对应onselect事件)
w:timeFieldonfocus, onblur, onchange, ondisable, onenable, onshow, onhide,onexpand,oncollapse,onselectFieldChangeEvent(对应onchange事件),SelectionChangedEvent(对应onselect事件)
w:dateFieldonfocus, onblur, onchange, ondisable, onenable, onshow, onhideFieldChangeEvent(对应onchange事件)
w:dateTimeFieldonfocus, onblur, onchange, ondisable, onenable, onshow, onhideFieldChangeEvent(对应onchange事件)

下面是强类型事件具有的属性列表。

表 18.2. 强类型事件及其属性

强类型事件类属性
FieldChangeEventoldValue, newValue
CheckEventchecked
SelectionChangedEventlabel, index, value
RowSelectEventrowIndex, selectedValues
RowDeselectEventrowIndex
RowDblClickEventrowIndex, selectedValues
CellSelectEventrowIndex, colIndex, selectedValues
TreeNodeEventeventNode
KeyEventshiftKey, ctrlKey, altKey, key