Поймать ключевой код в AjaxBehaviorEvent of JSF 2 - PullRequest
3 голосов
/ 28 декабря 2011

У меня есть событие JSF ajax keyup, связанное со списком событий в компоненте поддержки.

Код в файле 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;
    }

}

Может кто-нибудь сказать, пожалуйста, как это делаетсяв бобе?

1 Ответ

6 голосов
/ 28 декабря 2011

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

(обратите внимание, что id скрытого поля включено в execute, чтобы оно отправлялось вместе по запросу ajax, также обратите внимание, что binding используется для возможности динамического получения сгенерированного идентификатора клиента в document.getElementById(), чтобы установить значение кода ключа, в качестве альтернативы можно также жестко закодировать идентификатор клиента, если он фиксирован)

с помощью

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

Обзор всех действительных значений keyCode можно найти в справочнике Mozilla DOM .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...