[英]JSF invoke backing bean method and reRender components on ENTER key
我有一个数据表作为搜索字段。 我希望在按下ENTER键时调用辅助bean上的方法,以及要重新呈现的DataTable。
到目前为止,我的方法仅适用于IE 6和7,而不适用于FF。 这是inputText:
<h:inputText
value="#{applicantProductListBean.applicantNameFilterValue}"
id="applicantNameFilterValue" onkeypress="submitByEnter(event)">
</h:inputText>
这是我调用的Javascript方法:
function submitByEnter(e){
if(e.keyCode==13){
// alert("Enter was pressed");
e.returnValue=false;
e.cancel=true;
document.getElementById("applicantProductListForm:refreshButton").click();
}
}
如您所见,Javascript方法点击页面上存在的按钮刷新:
<a4j:commandButton value="Refresh" id="refreshButton"
action="#{applicantProductListBean.refreshData}"
image="/images/icons/refresh48x48.gif"
reRender="table, scroller">
</a4j:commandButton>
refreshData方法不返回任何内容。 如前所述,这仅适用于IE 6和IE 7。
有谁知道为什么它在FF中不起作用?
我正在考虑的另一个选择是HotKey,它确实可以捕获ENTER的事件, 但它只能调用Javascript,所以它不合适。
通过RichFaces或普通JSF这样做的正确方法是什么?
干杯!
更新:
BalusC略微修改了答案,有效的脚本是:
if (event.preventDefault) {
// Firefox
event.preventDefault();
} else {
// IE
event.returnValue = false;
}
尝试通过以下方式替换JS块:
function submitByEnter(e){
if (e.keyCode == 13) {
e.preventDefault();
document.getElementById("applicantProductListForm:refreshButton").click();
}
}
或更好,
function submitByEnter(e){
if (e.keyCode == 13) {
document.getElementById("applicantProductListForm:refreshButton").click();
return false;
} else {
return true;
}
}
和输入的onkeypress
onkeypress="return submitByEnter(event)"
如果这不起作用,请运行Firebug的JS调试器以查看JS代码是否按预期运行。
以下为我工作:
<h:panelGrid onkeypress="searchByEnterAndReturn(event)">
<b:aCustomComponent value="#{evolutionBackingAction.value}" id="someID"/>
</h:panelGrid>
<a4j:commandButton value="Search Now" action="search" id="searchButton"/>
<script type="text/javascript">
function searchByEnterAndReturn(e){
if(e.keyCode==13){
document.getElementById("generalForm:pageHeader:searchButton").click();
}
}
</script>
这是有效的,但是为了找到我的搜索按钮的ID,我不得不搜索我的页面的源代码,因为找不到searchButton id本身!
我本可以在customComponent上完成此操作但是我可以控制该组件的源代码并且没有实现onkeypress方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.