当我从键盘上按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。我不知道另一种直接调用方法的方法。 任何的想法?
答案 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"/>
但请确保在组件中添加clientComponent = true。