struts2 jquery ajax和客户端validation不能正常工作

我使用了http://struts.jgeppert.com/struts2-jquery-showcase/index.action和http://code.google.com/p/struts2-jquery/wiki/Validation中的标准代码段。

但客户端和ajax服务器端validation不能协同工作。

问题是表单提交不会停止,即使我们阻止preventDefault或执行任何其他操作也会preventDefault操作。

        
Submit form bellow.
    AJAX Form with Validation
    function customeValidation(form, errors) { //List for errors // alert("in js"); var list = $('#formerrors'); //Handle non field errors if (errors.errors) { $.each(errors.errors, function(index, value) { list.append('
  • '+value+'
  • \n'); }); } //Handle field errors if (errors.fieldErrors) { $.each(errors.fieldErrors, function(index, value) { var elem = $('#'+index); if(elem) { alert(value[0]); } }); } } $.subscribe('before', function(event,data) { var fData = event.originalEvent.formData; alert('About to submit: \n\n' + fData[0].value + ' to target '+event.originalEvent.options.target+' with timeout '+event.originalEvent.options.timeout ); var form = event.originalEvent.form[0]; if (form.name.value.length < 2) { alert('Please enter a value with min 2 characters'); **// the event does not stop here if we use ajax validation ie validate = true, if we remove it then this works.** event.originalEvent.options.submit = false; } });

    如果我们在提交按钮中使用ajaxvalidation即validate = true,则event.originalEvenet.options.submit = false不会在此处停止,如果我们将其删除则可以使用。**

    好,

    我在这里查看struts2 jquery插件代码o.validate在struts2中调用validate函数,而当设置为false时o.options.submit不调用实际操作。

    现在,如果我的客户端validation应该能够阻止ajaxvalidation。

    但是在这里,我无法设置event.originalEvent.validate = false因此总是会发生ajaxvalidation。

    需要一定的解决方法是本机库有一个用例,客户端validation必须能够撤销服务器端validation并避免网络调用。

     params.beforeSubmit = function(formData, form, formoptions) { var orginal = {}; orginal.formData = formData; orginal.form = form; orginal.options = formoptions; orginal.options.submit = true; s2j.publishTopic(elem, always, orginal); if (o.onbef) { $.each(o.onbef.split(','), function(i, topic) { elem.publish(topic, elem, orginal); }); } if (o.validate) { orginal.options.submit = s2j.validateForm(form, o); orginal.formvalidate = orginal.options.submit; if (o.onaftervalidation) { $.each(o.onaftervalidation.split(','), function(i, topic) { elem.publish(topic, elem, orginal); }); } } if (orginal.options.submit) { s2j.showIndicator(indi); if(!o.datatype || o.datatype !== "json") { if (o.loadingtext && o.loadingtext !== "false") { $.each(o.targets.split(','), function(i, target) { $(s2j.escId(target)).html(o.loadingtext); }); } else if (s2j.defaults.loadingText !== null) { $.each(o.targets.split(','), function(i, target) { $(s2j.escId(target)).html(s2j.defaults.loadingText); }); } } } return orginal.options.submit; }; params.success = s2j.pubSuc(elem, always, o.onsuc, indi, 'form', o); params.complete = s2j.pubCom(elem, always, o.oncom, o.targets, indi, o); params.error = s2j.pubErr(elem, always, o.onerr, o.errortext, 'html'); $.each(o.formids.split(','), function(i, fid) { s2j.log('submit form : ' + fid); $(s2j.escId(fid)).ajaxSubmit(params); }); return false; });