微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 在JSF 2的AjaxBehaviorEvent中捕获KeyCode

我有一个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>

支持bean中的代码如下所示.

public void changeDetailsEvent(AjaxBehaviorEvent event) {
}

我希望根据按键实现不同的逻辑,如下所示为伪代码.

public void changeDetailsEvent(AjaxBehaviorEvent event) {
    If (event.key = Key.enter) {
        do something;
    } else if (event.key = Key.Escape) {
        so something else;
    } else {
        do nothing;
    }

}

有人可以告诉我这是如何在支持bean中完成的吗?

解决方法:

AjaxBehaviorEvent不包含有关JavaScript事件对象的任何信息.您需要自己传递所需的信息.这可以通过隐藏的输入字段来实现,其值将由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}" />

(请注意隐藏字段的id包含在execute中,以便在ajax请求中提交,请注意绑定用于能够在document.getElementById()中动态获取生成的客户端ID.为了设置密钥代码值,您也可以硬编码客户端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;
    }
}

您可以在Mozilla DOM reference中找到所有有效keyCode值的概述.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐