Как вызвать метод управляемого бина на кнопке ESC?
Я хочу выполнить метод из моего управляемого компонента при нажатии клавиши ESC на клавиатуре. Я прочитал несколько других постов, но ни один из них не работает над моим приложением. Возможно, я не размещаю скрипт в нужной позиции на странице. Я поместил его над dhe af:document (это приложение ADF), также внутри af:document. Это код JS:
<af:resource type="javascript">
$(document).keyup(function (e) {
if (e.which == 27) {
document.getElementById('cb3').click();
}
});
</af:resource>
"cb3" - это идентификатор кнопки на моей странице, которая вызывает метод из моего бина. Я не знаю другого способа вызова метода напрямую. Любая идея?
3 ответа
Я благодарю @Gawish за ответ, так как он помог мне найти решение. Я не мог использовать это решение, потому что нет типа:"keyPress" в clientListener в ADF 11g. Однако мне это понравилось, и это работает очень хорошо:
window.onkeyup = function (e) {
if (e.keyCode == 27) {
var button = AdfPage.PAGE.findComponentByAbsoluteId('cb3');
AdfActionEvent.queue(button, true);
e.cancel();
}
}
Обратите внимание, e.cancel() в конце обязательно!
Вы должны иметь что-то вроде этого
<af:document title="Press ESC to do some action" id="d1">
<f:facet name="metaContainer">
<af:resource type="javascript">
function onKeyPress(evt){
var _keyCode = evt.getKeyCode();
if (_keyCode == AdfKeyStroke.ESC_KEY ){
var button = AdfPage.PAGE.findComponentByAbsoluteId('cb1');
AdfActionEvent.queue(button,true);
evt.cancel();
}
}
</af:resource>
</f:facet>
<af:commandButton text="Execute when ESC key is pressed" clientComponent="true" id="cb1" actionListener="#{someScope.someFunction}" />
<af:clientListener method="onKeyPress" type="keyPress"/>
</af:document>
Это создаст клиентский прослушиватель для документа, который должен выполняться при любом нажатии клавиши, и он прослушивает клавишу ESC, и если он обнаружил, что он выполняет то, что выполняет кнопка!
Есть еще одно решение: добавить <af:clientListener method="handleESCaction" type="popupCanceled"/>
в вашем компоненте adf, но убедитесь, что clientComponent=true должен быть добавлен в компонент.