JSF在ENTER键上调用backing bean方法和reRender组件

时间:2010-02-23 11:36:09

标签: javascript events jsf richfaces

我有一个带有搜索字段的数据表。我希望在按下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; 
}

2 个答案:

答案 0 :(得分:4)

尝试通过以下方式替换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代码是否按预期运行。

答案 1 :(得分:0)

以下为我做了工作:

<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方法。