如何在ESC按钮上调用托管bean方法?

时间:2013-09-06 13:59:30

标签: javascript jsf oracle-adf managed-bean esc-key

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

3 个答案:

答案 0 :(得分: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键,如果它发现它执行Button执行的任何操作!

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

在您的adf组件中

但请确保在组件中添加clientComponent = true。