32.5. <ajax:keyBinding>

keyBinding构件用于绑定快捷键到后台的方法或客户端JS方法。使得可以用快捷键来调用一个JS方法或后台方法。

32.5.1. 构件信息

表 32.8. 构件信息

Component Typeorg.operamasks.faces.component.ajax.AjaxKeyBinding
Component Familyorg.operamasks.faces.AjaxKeyBinding
Component Classorg.operamasks.faces.component.ajax.AjaxKeyBinding
Tag Classorg.operamasks.faces.webapp.ajax.AjaxKeyBindingTag
Renderer Typeorg.operamasks.faces.component.ajax.AjaxKeyBinding
Renderer Class(AJAX)org.operamasks.faces.render.ajax.AjaxKeyBindingRenderer

继承体系

+java.lang.Object

++javax.faces.component.UIComponent

+++javax.faces.component.UIComponentBase

++++javax.faces.component.UICommand

+++++org.operamasks.faces.component.ajax.base.AjaxKeyBindingBase

++++++org.operamasks.faces.component.ajax.AjaxKeyBinding

32.5.2. 属性

表 32.9. 属性

action 定义类 javax.faces.component.UICommand
类型 javax.el.MethodExpression(javax.el.MethodExpression)
是否必须 延时求值
特定Action事件激活时调用的方法
actionListener 定义类 javax.faces.component.UICommand
类型 javax.el.MethodExpression(javax.el.MethodExpression)
是否必须 延时求值
特定ActionEvent事件激活时调用的方法
alt 定义类 org.operamasks.faces.component.ajax.AjaxKeyBinding
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否需要按下Alt键
binding 定义类 javax.faces.component.UIComponentBase
类型 javax.el.ValueExpression(javax.faces.component.UIComponent)
是否必须 延时求值
一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。
clientScript 定义类 org.operamasks.faces.component.ajax.AjaxKeyBinding
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
客户端JS脚本,响应快捷键后先执行该脚本,如果返回true或不返回则继续执行action指向的后台方法,如果返回false则不执行action指向的后台方法
ctrl 定义类 org.operamasks.faces.component.ajax.AjaxKeyBinding
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否需要按下Ctrl键
eventName 定义类 org.operamasks.faces.component.ajax.AjaxKeyBinding
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
事件名,默认为keydown。可以使用的值有keydown、keypress、keyup
id 定义类 javax.faces.component.UIComponentBase
类型 java.lang.String
是否必须 延时求值
这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。
immediate 定义类 javax.faces.component.UICommand
类型 javax.el.ValueExpression(boolean)
是否必须 延时求值
是否跳过验证
key 定义类 org.operamasks.faces.component.ajax.AjaxKeyBinding
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
绑定的快捷键,可同时绑定多个快捷键,用逗号分隔
rendered 定义类 javax.faces.component.UIComponentBase
类型 boolean(boolean)
是否必须 延时求值
一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。
shift 定义类 org.operamasks.faces.component.ajax.AjaxKeyBinding
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否需要按下Shift键
skipBrowserAction 定义类 org.operamasks.faces.component.ajax.AjaxKeyBinding
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否阻止浏览器的默认快捷键行为,默认为true
target 定义类 org.operamasks.faces.component.ajax.AjaxKeyBinding
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
快捷键响应的范围,必须是一个页面的dom对象,不写则默认为父构件的dom对象范围内,全页面范围内响应则用document
value 定义类 javax.faces.component.UICommand
类型 java.lang.String
是否必须 延时求值
构件的当前值

32.5.3. 构件API

32.5.4. 示例

以下的例子介绍了如何在某个构件类下面应用快捷键和如何在document范围内为某个后台方法同时绑定多个快捷键:

<w:textField fieldLabel="TextField">
    <ajax:keyBinding key="A" action="#{testKeyBindingBean.show}" alt="true" />
</w:textField>
<w:form>
    <w:button value="submit" jsvar="btn" />
    <ajax:keyBinding target="document" key="F7" clientScript="btn.fireEvent('click');" />
</w:form>
<ajax:keyBinding target="document" key="F8,N1,1,B,C" action="#{testKeyBindingBean.submit}"
    clientScript="return confirm('确认提交?');" />

在第一个w:textField得到焦点的情况下按键盘的Alt+A可以执行#{testKeyBindingBean.show}后台方法。在页面任何地方得到焦点时可以按键盘的F7可执行js代码(该js代码作用是自动点击jsvar="btn"的按钮,所以按F7的效果与用鼠标点"submit"按钮的效果是一样的)。在页面任何地方按键盘的F8或数字键盘的1或主键盘的数字1或者B或者C这5个中的任何一个效果都是一样的,都是弹出一个提示框“确认提交?”,如果点击提示框的“是”按钮就会执行后台的#{testKeyBindingBean.submit}方法,如果点击提示框的“否”按钮则不执行后台的#{testKeyBindingBean.submit}方法。

32.5.5. 快捷键写法说明。

1.字母键直接写A~Z,大小写均可。

2.数字键写0~9,小键盘的数字键写N0~N9。

3.功能键F1~F12直接写F1~F12,大小写均可。

4.特殊快捷键:BACKSPACE、TAB、ENTER、RETURN、PAUSE、CAPS_LOCK、ESC、SPACE、PAGEUP、PAGEDOWN、END、HOME、LEFT、UP、RIGHT、DOWN、PRINT_SCREEN、INSERT、DELETE

5.多个快捷键之间用逗号隔开。