Struts2,Ajax表单在验证错误后不提交

时间:2015-11-30 09:06:46

标签: struts2 token

我想使用ajax提交表单。为此,我使用Jquery AjaxForm插件。表单包含文件和一些需要使用AJAX提交到struts2操作的数据。第一次表单提交正确,我收到错误消息,预计作为我和做一些服务器端验证。但是当我提交第二次表格并提供正确信息的表格时,表格没有提交给行动。

我已经搜索了这个问题,我开始知道它是由于我正在使用的令牌,因为第二次令牌值未达到匹配。

我如何解决此问题或我可以更新表单标记值的一些命中。

Code Sample:

<s:form id="uploadForm" name="uploadForm" action="usrUploadFormat" method="post" validate="true" enctype="multipart/form-data" autocomplete="off">
    <div class="fields-format-wraper ulb-upload-wrapper">
        <div class="error-wrapper">
            <s:fielderror/>
            <s:actionerror/>
            <ul class='errorMessage passwdError' id="errors">
            </ul>
        </div>
        <div class="fields-row" style="display: none;">
            <div class="doc-check-wrapper">
                <s:token/>
            </div>
        </div>
        <div class="fields-row" id="doc-field">
            <span><s:label cssClass="label" value="Upload*"/></span>
            <span><s:file  cssClass="inputFields inputs format file" id="formatToUpload" name="formatToUpload" accept="application/ms-excel,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"></s:file> </span>
         </div>
         <div class="fields-row formats-row btn-upload-wrapper">
            <span style="float:left;margin-left: 175px;"><input type="button"  class="btn-submit" value="Upload" name="auth" id="upload-now"/></span>                            
        </div>
    </div>
</s:form>

Ajax调用表单:

var options = {
    success: function(msg) 
    {
        var msgs = msg.split(":");
        if(msgs.length>0){
            if(msgs[0] == "Error"){
                $('.errorMessage.passwdError').empty();
                var counter = 0;
                $.each( msgs, function( key, value ) {
                    counter++;
                    if(counter == 1)
                        return;
                   $('.errorMessage.passwdError').append("<li>"+value+"</li>");
                });
                window.parent.jQuery.fancybox.hideLoading();
            } else{
                alert(msgs[0]);
            }
        }
    },
    error: function(err)
    {
       jAlert("unable to upload file.",
        'Upload Report Format Error.',
        function (r) { 
            if(r == true){
                window.parent.location.reload();
                window.parent.jQuery.fancybox.close();
            }
       });
    },
    beforeSubmit: function(arr, $form, options) {
       window.parent.jQuery.fancybox.showLoading(); 
    }
};
$("#uploadReportFormatsForm").ajaxForm(options);

struts.xml中

<interceptor-stack name="pmidcCSRFStack">  
    <interceptor-ref name="tokenSession">
        <param name="includeMethods">*</param>
    </interceptor-ref>
    <interceptor-ref name="dataSourceCheck"/>
    <interceptor-ref name="defaultStack"/> 
 </interceptor-stack>
 <action name="usrUploadFormat" class="com.org.pmidc.action.ULB_UploadReport">
    <interceptor-ref name="pmidcCSRFStack"/>
    <result name="invalid.token" type="tiles">csrfError</result>
    <interceptor-ref name="i18n"/>
    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">application/pdf,application/ms-excel,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document</param>
            <param name="maximumSize">1048576000000</param>
    </interceptor-ref> 
</action>

当我提交带有服务器端错误的表单时,如选择错误的格式pdf,或者文件大小大于允许,那么我将得到错误大小或文件格式是不允许的。一旦我纠正了所有错误并再次提交表单,那么请求不会转到执行操作,而是从令牌拦截器返回响应。我开始知道这是因为警告显示令牌不匹配时的日志。

这意味着很明显表单没有使用令牌提交到期错误。所以解决方案是更新令牌值,这里我卡住了。如何在下次提交表单时更新或刷新令牌值。

0 个答案:

没有答案
相关问题