Primefaces AJAX回调:onstart vs. onclick

时间:2015-11-20 06:34:11

标签: javascript jsf primefaces

我正在使用带有以下代码的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,但无法弄清楚那里有什么问题?

1 个答案:

答案 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请求。

以上解释来自Primefaces AJAX callbacks: onstart vs. onclick