HTML 和 JSF PrimeFaces - 为什么 actionListener 在 onClick 存在时不执行?



我正在使用HTML和JSF Primefaces,对于系统的这一部分,Primefaces没有启用(不知道为什么),问题是:

我有一个按钮

<h:commandButton id="btnPrint"
    onclick = "switchDisabled();"
    actionListener="#{componentTrackingController.printReport()}"
    value="Print Report"
/>

onClick的执行和工作良好(它只是禁用一些其他按钮)但actionListener不是。事实是,当我删除"onClick"行时,actionsListener工作得很好。

我的JavaScript代码很简单(但我认为问题不在这里)

<script type="text/javascript">
    function switchDisabled(){
        askDisabled(document.getElementById('mainForm:cboURdependences'));
        askDisabled(document.getElementById('mainForm:btnPrint'));
        askDisabled(document.getElementById('mainForm:btnCloseReport'));
    }
    function askDisabled(elem){
        if (elem.disabled != true){
            elem.disabled = true;
        }else{
            elem.disabled = false;
        }
    }  
</script>    

根据我的评论,它正在立即这样做。有几种方法可以解决这个问题,(ajax钩子)或javascript中的setTimeout。

<h:commandButton id="btnPrint"
    onclick = "setTimeout(function(){ switchDisabled() }, 1000);"
    actionListener="#{componentTrackingController.printReport()}"
    value="Print Report"
/>

这绑定了一个超时调用你的switchDisabled标签在1秒(1000ms) -因此你的ajax等应该已经运行,它绑定它,你会发现你可能会把它改变为500或更少,但你不希望它在你的提交被调用之前触发它。

参考:http://www.w3schools.com/jsref/met_win_settimeout.asp查看更多信息

我不熟悉jsf/PrimeFaces,但根据这个问题:PrimeFaces的onclick和onsuccess差异

尝试使用"oncomplete":

<h:commandButton id="btnPrint"
    oncomplete = "switchDisabled();"
    actionListener="#{componentTrackingController.printReport()}"
    value="Print Report"
/>

摘自PrimeFaces文档(3.5):

oncomplete: ajax请求完成时执行的Javascript处理程序。

相关内容

  • 没有找到相关文章

最新更新