Catch KeyCode in AjaxBehaviorEvent of JSF 2

前端 未结 1 698
慢半拍i
慢半拍i 2020-12-06 20:19

I have a JSF ajax keyup event linked to an event listner in a backing bean.

The code in the JSF file is like below.



        
相关标签:
1条回答
  • 2020-12-06 20:47

    The AjaxBehaviorEvent doesn't contain any information about the JavaScript event object. You need to pass the desired information along yourself. This can be achieved by a hidden input field whose value is to be prefilled by JavaScript. For example,

    <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}" />
    

    (please note that the id of the hidden field is included in execute so that it get submitted along on the ajax request, please also note that the binding is used to be able to dynamically obtain the generated client ID in document.getElementById() in order to set the key code value, you could alternatively also hardcode the client ID if it's fixed)

    with

    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;
        }
    }
    

    You can find an overview of all valid keyCode values in the Mozilla DOM reference.

    0 讨论(0)
提交回复
热议问题