keyBinding构件用于绑定快捷键到后台的方法或客户端JS方法。使得可以用快捷键来调用一个JS方法或后台方法。
表 32.8. 构件信息
| Component Type | org.operamasks.faces.component.ajax.AjaxKeyBinding |
| Component Family | org.operamasks.faces.AjaxKeyBinding |
| Component Class | org.operamasks.faces.component.ajax.AjaxKeyBinding |
| Tag Class | org.operamasks.faces.webapp.ajax.AjaxKeyBindingTag |
| Renderer Type | org.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.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 | |||
| 是否必须 | 否 | 延时求值 | 否 | |
| 构件的当前值 | ||||
以下的例子介绍了如何在某个构件类下面应用快捷键和如何在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}方法。