1

当我按下键盘上的 ESC 键时,我想从我的托管 bean 中执行一个方法。我已经阅读了其他一些帖子,但没有一个在我的应用程序上工作。也许我没有将脚本放在页面内的正确位置。我将它放在 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”是我的页面上从我的 bean 调用方法的按钮的 ID。我不知道直接调用该方法的另一种方法。任何的想法?

4

3 回答 3

2

你应该有这样的东西

<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 键,如果发现它执行按钮执行的任何操作!

于 2013-09-07T04:58:55.887 回答
1

我感谢@Gawish 的回复,因为它帮助我找到了解决方案。我无法使用该解决方案,因为 ADF 11g 的 clientListener 中没有 type:"keyPress"。但是我确实喜欢这个并且效果很好:

window.onkeyup = function (e) {
          if (e.keyCode == 27) {
              var button = AdfPage.PAGE.findComponentByAbsoluteId('cb3');
              AdfActionEvent.queue(button, true);
              e.cancel();
          }
      }

注意,最后的 e.cancel() 是强制的!

于 2013-09-09T07:12:46.243 回答
0

还有另一种解决方案:添加<af:clientListener method="handleESCaction" type="popupCanceled"/>

在您的 adf 组件中,但确保 clientComponent=true 应添加到组件中。

于 2015-09-07T12:22:47.647 回答