我使用HTML和JSF Primefaces,对于系统的这一部分,PrimeFaces没有启用(不知道为什么),问题是:
我有一个按钮
<h:commandButton id="btnPrint"
onclick = "switchDisabled();"
actionListener="#{componentTrackingController.printReport()}"
value="Print Report"
/>
onClick它的执行和运行良好(它只是禁用其他一些按钮) 但是actionListener不是。事实上,当我删除&#34; onClick&#34; action,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>
答案 0 :(得分:0)
我不熟悉jsf / PrimeFaces,但是对于这个问题:Primefaces onclick and onsuccess differences
尝试使用“oncomplete”:
<h:commandButton id="btnPrint"
oncomplete = "switchDisabled();"
actionListener="#{componentTrackingController.printReport()}"
value="Print Report"
/>
来自PrimeFaces文档(3.5):
oncomplete :在ajax请求完成时执行的Javascript处理程序。
答案 1 :(得分:0)
根据我的评论,它会立即执行。 有几种方法可以解决这个问题,(ajax挂钩)或javascript中的setTimeout。
<h:commandButton id="btnPrint"
onclick = "setTimeout(function(){ switchDisabled() }, 1000);"
actionListener="#{componentTrackingController.printReport()}"
value="Print Report"
/>
这会绑定一个时间来在1秒(1000毫秒)内调用你的switchDisabled标签 - 因此你的ajax等应该已经运行并绑定它,你会发现你可以将它改为500甚至更少,但你不希望它在你的提交被调用之前解雇它。
请参阅:http://www.w3schools.com/jsref/met_win_settimeout.asp 了解更多信息