Bud*_*tne 3 java ajax jsf java-ee
我有一个JSF ajax keyup事件链接到支持bean中的事件列表器.
JSF文件中的代码如下所示.
<h:inputText id="txtDescription" value="#{institutionController.current.description}" disabled="#{institutionController.modifyControlDisable}" >
<f:ajax event="keyup" listener="#{institutionController.changeDetailsEvent}" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)
支持bean中的代码如下所示.
public void changeDetailsEvent(AjaxBehaviorEvent event) {
}
Run Code Online (Sandbox Code Playgroud)
我希望根据按键实现不同的逻辑,如下所示为伪代码.
public void changeDetailsEvent(AjaxBehaviorEvent event) {
If (event.key = Key.enter) {
do something;
} else if (event.key = Key.Escape) {
so something else;
} else {
do nothing;
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我这是如何在支持bean中完成的吗?
在AjaxBehaviorEvent不包含JavaScript的任何信息event对象.您需要自己传递所需的信息.这可以通过隐藏的输入字段来实现,其值将由JavaScript预先填充.例如,
<h:inputText value="#{bean.input}" onkeyup="document.getElementById('#{keyCode.clientId}').value=event.keyCode">
<f:ajax event="keyup" execute="@this keyCode" listener="#{bean.listener}" />
</h:inputText>
<h:inputHidden id="keyCode" binding="#{keyCode}" value="#{bean.keyCode}" />
Run Code Online (Sandbox Code Playgroud)
(请注意id隐藏字段的内容包含在execute以便在ajax请求中提交,请注意,binding用于能够动态获取生成的客户端ID document.getElementById()以便设置密钥代码值,你可以选择硬编码客户端ID,如果它是固定的)
同
private String input;
private int keyCode;
public void listener() {
switch (keyCode) {
case 13:
// Enter key was pressed.
break;
case 27:
// Escape key was pressed.
break;
default:
// Other key was pressed.
break;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以keyCode在Mozilla DOM参考中找到所有有效值的概述.
| 归档时间: |
|
| 查看次数: |
5752 次 |
| 最近记录: |