我正在使用带有以下代码的primefaces命令按钮。
<p:commandButton id="filereconSubmit" value="#{msg.button_submit}" oncomplete="completeWork();" onclick="clearPagination();filereconWidget.clearFilters();" update="filereconModalDialog" action="#{reconController.register}" styleClass="content-data" />
上面的代码工作正常。但是当我添加javascript validate函数时,oncomplete不会被触发。
onclick="clearPagination();filereconWidget.clearFilters();return validate(#{reconciliationController.reconSearchDays})"
Javascript代码如下所示。
function completeWork() {
PrimeFaces.clearSelection();
$('th.ui-sortable-column').removeClass('ui-state-active').find('.ui-sortable-column-icon').removeClass('ui-icon-triangle-1-n ui-icon-triangle-1-s');
showDatatable();
}
function validate(search_days){
var isValid = false;
var dateformat = "d-MMM-yyyy";
var sdate = Date.parse(document.getElementById('filerecon:startdate_input').value, dateformat);
var edate = Date.parse(document.getElementById('filerecon:enddate_input').value, dateformat);
if(sdate == null || edate == null){
alert("Enter both Start Date and End Date");
} else if (sdate > edate) {
alert("Select an End Date after the Start Date");
} else if((edate-sdate)>(1000*60*60*24*search_days)){
alert("Search is limited to "+search_days+" days. So End Date should not be more than "+search_days*24+" hours from Start Date.");
} else {
isValid = true;
}
return isValid;
}
我经历了JSF execution order of events,但无法弄清楚那里有什么问题?
答案 0 :(得分:0)
修复此问题的原因是
考虑以下代码:
<p:commandLink action="#{bean.method}" onstart="return func()" ...>
如果“func()”返回false,则此代码将中止AJAX请求,并且不会调用bean.method()。 如果“func()”返回true,则AJAX请求进程处理。 如果用onclick替换onstart,即使func()返回true,AJAX请求也会中止。
这是因为Primefaces将代码放在onclick处理程序中生成AJAX请求,预先挂起来自p:commandLink onclick的代码。如果您的代码返回,则永远不会发送AJAX请求。