Как вызвать метод управляемого бина на кнопке 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 должен быть добавлен в компонент.

Другие вопросы по тегам