使用Struts2和Ajax在文件上载时获取NullPointer异常

使用Struts2和Ajax在文件上载时获取NullPointer异常,struts2,jquery-file-upload,Struts2,Jquery File Upload,我正在使用Ajax实现Struts2文件上传;我添加了jquery代码,如下所示 $("#btnUploadAttach").click(function () { alert("Uploading your file"); //stop submit the form, we will post it manually. event.preventDefault(); // Get form

我正在使用Ajax实现Struts2文件上传;我添加了jquery代码,如下所示

$("#btnUploadAttach").click(function () {
            alert("Uploading your file");
            //stop submit the form, we will post it manually.
            event.preventDefault();

            // Get form
            var form = $('#fileUploadForm')[0];

            // Create an FormData object
            var data = new FormData(form);

            alert("Uploading your file" + data);
            $.ajax({
                type: 'POST',
                enctype: 'multipart/form-data',
                data: data,
                contentType: false,
                processData: false,
                cache: false,
                timeout: 600000,
                url: "/Dashboard/UploadFile.action",
                success: function (data) {
                    alert("file saved successfully");
                }
            });
        });
另外,请查看以下JSP代码:

<s:form id="fileUploadForm" enctype="multipart/form-data" method="POST">
                        <div class="col-md-12">
                            <s:label for="CashReqFileUpload">Select Your File:</s:label>
                            </div>
                            <div class="col-md-12">
                                <div class="col-md-4">
                                <s:file name="CashReqFileUpload" id="CashReqFileUpload"/>

                            </div>
                            <div class="col-md-4"><input type="submit" value="Upload Document" id="btnUploadAttach" ></div>
                            <div class="col-md-4">
                                <button id="btnPrint" class="btn btn-success">Print</button>
                            </div>
                        </div>
                    </s:form>
我尝试了Serialize(),但没有成功,我找到了一个使用Ajax实现的解决方案。它给了我NullPointerException,如下所示:

 private File CashReqFileUpload;
private String CashReqFileUploadFileName;
private String CashReqFileUploadContentType;
private String destPath;

public String execute(){
    return SUCCESS;
}

public String uploadFileOnServer() throws IOException {
    destPath = "D:/Temp/";
    System.out.println("CashReqFileUpload File name: " + CashReqFileUpload);
    System.out.println("CashReqFileUploadFileName File name: " + CashReqFileUploadFileName);
    System.out.println("destPath File Name : "+destPath);
    File destFile = new File(destPath, CashReqFileUploadFileName);
    FileUtils.copyFile(CashReqFileUpload, destFile);
    return SUCCESS;
}

public File getCashReqFileUpload() {
    return CashReqFileUpload;
}

public void setCashReqFileUpload(File CashReqFileUpload) {
    this.CashReqFileUpload = CashReqFileUpload;
}

public String getCashReqFileUploadFileName() {
    return CashReqFileUploadFileName;
}

public void setCashReqFileUploadFileName(String CashReqFileUploadFileName) {
    this.CashReqFileUploadFileName = CashReqFileUploadFileName;
}

public String getCashReqFileUploadContentType() {
    return CashReqFileUploadContentType;
}

public void setCashReqFileUploadContentType(String CashReqFileUploadContentType) {
    this.CashReqFileUploadContentType = CashReqFileUploadContentType;
}
Severe:   java.lang.NullPointerException
    at java.io.File.<init>(File.java:317)
    at com.ISG.CIA.CTI.operations.UploadFile.uploadFileOnServer(UploadFile.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:899)
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1544)
    at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
    at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:96)
    at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:88)
    at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1620)
    at ognl.ASTMethod.getValueBody(ASTMethod.java:91)
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
    at ognl.SimpleNode.getValue(SimpleNode.java:258)
    at ognl.Ognl.getValue(Ognl.java:470)
    at ognl.Ognl.getValue(Ognl.java:434)
    at com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:371)
    at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:423)
    at com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:369)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:436)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:253)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:260)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:52)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:139)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:134)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:134)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:199)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:69)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:115)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:88)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:246)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:99)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:139

Severe:   hain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
at java.lang.Thread.run(Thread.java:744)
Severe:java.lang.NullPointerException
位于java.io.File。(File.java:317)
在com.ISG.CIA.CTI.operations.UploadFile.uploadFileOnServer上(UploadFile.java:35)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:483)
在ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:899)
在ognl.OgnlRuntime.CallApprovedMethod(OgnlRuntime.java:1544)中
在ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
位于com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:96)
位于com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:88)
在ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1620)中
位于ognl.ASTMethod.getValueBody(ASTMethod.java:91)
位于ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
位于ognl.SimpleNode.getValue(SimpleNode.java:258)
位于ognl.ognl.getValue(ognl.java:470)
位于ognl.ognl.getValue(ognl.java:434)
位于com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:371)
位于com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:423)
位于com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:369)
在com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:436)
位于com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
位于org.apache.struts2.interceptor.debug.DebuggingInterceptor.intercept(DebuggingInterceptor.java:253)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
在com.opensymphony.xwork2.intercept.DefaultWorkflowIntercept.doIntercept(DefaultWorkflowIntercept.java:176)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
位于com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:260)
位于org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:52)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
位于com.opensymphony.xwork2.interceptor.conversionerrorrinterceptor.doIntercept(conversionerrorrinterceptor.java:139)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
在com.opensymphony.xwork2.interceptor.parameters-sinterceptor.doIntercept(parameters-sinterceptor.java:134)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
在com.opensymphony.xwork2.interceptor.parameters-sinterceptor.doIntercept(parameters-sinterceptor.java:134)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)上
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
在com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:199)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
位于org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:69)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
位于org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:115)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
位于org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:88)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
位于org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:246)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
在com.opensymphony.xwork2.interceptor.modeldriventerceptor.intercept(modeldriventerceptor.java:99)
位于com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247)
在com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:139
严重:hain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)上
位于org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
位于org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
位于org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.ru上
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constant name = "struts.devMode" value = "true" />
<constant name="struts.ui.theme" value="simple"/>
<constant name="struts.custom.i18n.resources" value="operationProp.OperationalProp" />
<package name = "CTI" extends = "struts-default">
    <interceptors>
        <interceptor-stack name="modelParamsPrepareParamsStack">
            <interceptor-ref name="exception"/>
            <interceptor-ref name="alias"/>
            <interceptor-ref name="i18n"/>
            <interceptor-ref name="checkbox"/>
            <interceptor-ref name="multiselect"/>
            <interceptor-ref name="modelDriven"/>
            <interceptor-ref name="params">
                <param name="excludeParams">^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*</param>
            </interceptor-ref>
            <interceptor-ref name="servletConfig"/>
            <interceptor-ref name="prepare"/>
            <interceptor-ref name="chain"/>
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="staticParams"/>
            <interceptor-ref name="actionMappingParams"/>
            <interceptor-ref name="params">
                <param name="excludeParams">^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*</param>
            </interceptor-ref>
            <interceptor-ref name="conversionError"/>
            <interceptor-ref name="validation">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
            <interceptor-ref name="workflow">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
        </interceptor-stack>
    </interceptors>
    <action name = "OnLoadAction" 
            class = "com.ISG.CIA.CTI.CashRequestManagement" 
            method = "execute">
        <result name = "success">/ApprovedHistory.jsp</result>
    </action>
    <action name = "OnClickOfCreateNewReq" 
            class = "com.ISG.CIA.CTI.CashRequestManagement" 
            method = "getCashReqDataForNewReq">
        <result name = "success">/CashRequestForm.jsp</result>
    </action>
    <action name = "onLoadForm" 
            class = "com.ISG.CIA.CTI.CashRequestManagement" 
            method = "getCashReqDataForSavedRequest">
        <result name = "success">/CashRequestForm.jsp</result>
    </action>
    <action name = "OnClickOfSaveRequest" 
            class = "com.ISG.CIA.CTI.CashRequestManagement" 
            method = "SaveCashRequest">
        <result name = "success">/CashRequestForm.jsp</result>
    </action>
    <action name="CashReqRej" 
            class="com.ISG.CIA.CTI.CashRequestManagement" 
            method="cancelCashReq">
        <result name="success">/CashRequestForm.jsp</result>
    </action>
    <action name="CashReqApprove" 
            class="com.ISG.CIA.CTI.CashRequestManagement" 
            method="approveCashReq">
        <result name="success">/CashRequestForm.jsp</result>
    </action>
    <action name="UploadFile" 
            class="com.ISG.CIA.CTI.operations.UploadFile" 
            method="uploadFileOnServer">
        <interceptor-ref name="modelDriven"/>  
        <interceptor-ref name="defaultStack"/>  
        <interceptor-ref name="fileUpload"/>
        <interceptor-ref name="basicStack"/> 
        <result name="none">/CashRequestForm.jsp</result>
    </action>
</package>
<action name="UploadFile" 
        class="com.ISG.CIA.CTI.operations.UploadFile" 
        method="uploadFileOnServer">
    <interceptor-ref name="fileUpload"/>
    <interceptor-ref name="modelDriven"/>  
    <interceptor-ref name="defaultStack"/>  
    <interceptor-ref name="basicStack"/> 
    <result name="none">/CashRequestForm.jsp</result>
</action>