首页 > 解决方案 > struts2中如何使用AJAX上传文件

问题描述

我创建了一个应用程序,其中有一个联系表格,用户可以在其中提供数据并上传文件。我成功创建表单,接收用户数据,系统将电子邮件发送给用户。但问题是,当用户附加文件时,我无法让它生效,它是null

所以请告诉我我在下面的代码中缺少什么,我在下面提供了所有内容。

在这里,我在 struts 操作中将文件设为。请帮我弄清楚我错过了什么。

文件文件 = sampServicesCO.getRequirementFile();

在此处输入图像描述

在此处输入图像描述

这是struts 动作的struts 配置。

<package name="requestQuote" namespace="/" extends="json-default">
    <action name="RequestQuote" class="com.workerizemap.actions.sampServices.SampServicesAction" method="requestQuote">
        <result type="json">
            <param name="noCache">true</param>
            <param name="excludeNullProperties">true</param>
            <param name="root">jsonData</param>
        </result>       
    </action>
</package>

一个带有简单字段和一个文件元素的 jsp 页面,以便用户可以上传文件以及其他详细信息。

<form id="requestQuoteFormId" action="/RequestQuote.action" method="POST" enctype="multipart/form-data">
<div class="row m-b-10">
    <div class="col-sm-3 custom-input-group"></div>
    <div class="col-sm-3 custom-input-group">
        <label for="sampServicesCO.companyName" class="custom-label"> Company Name </label>
        <s:textfield name="sampServicesCO.companyName" class="custom-field" required="true"></s:textfield>
    </div>      
</div>

<div class="row m-b-10">
    <div class="col-sm-3 custom-input-group"></div>
    <div class="col-sm-3 custom-input-group">
        <label for="sampServicesCO.requirementFile" class="custom-label"> Requirement File or any attachment ? </label>
        <s:file id="requirementFile" name="sampServicesCO.requirementFile"></s:file>
    </div>      
</div>


<div class="row m-b-10">
    <div class="col-sm-3 custom-input-group"></div>
    <div class="col-sm-7">
        <div style="overflow:auto;">
          <div style="float:left;">
            <button type="button" class="custom-button" onclick="ajaxJsonReturn('requestQuoteFormId', null, 'quoteResponseId')"> Send Inquiry </button>
          </div>
        </div>
    </div>
</div>
</form>

一个javascript函数,我在用户提交时调用。我使用 ajax 来执行 struts 操作并提交表单。表单已提交但没有文件,所以我也需要上传文件。

function ajaxJsonReturn( formId, theAction, jsonTargetId ) {

showLoader( "Sending your inquiry to one of the agents..." );

var formData = $("#"+formId);
var url = theAction === null ? formData.attr('action') : theAction;
url = getContextPath()+url;

$.ajax({
    url:url,
    data: formData.serialize(),
    cache: false,
    type: 'POST',
    success: function (jsonString) {
        hideLoader();
        var jsonObject = $.parseJSON(jsonString);
        if( jsonObject.value != null ) {
            $( "#" + jsonTargetId ).text( jsonObject.value );
        } else {
            $( "#" + jsonTargetId ).text( "An error occured, please contact test@gmail.com" );

        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
        hideLoader();
        alert( thrownError );
    }
});
}

一个对象,映射在 jsp 和 struts 动作上:

package com.workerizemap.actions.sampServices;

import java.io.File;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class SampServicesCO {

   private String companyName;
   private String companyEmail;
   private String contactNumber;
   private String description;
   private File requirementFile;

}

这实际上是尝试检索文件的 struts 操作,但它为空。所以请指导我到目前为止我所尝试的一切。

package com.workerizemap.actions.sampServices;

import java.io.File;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

import com.dsiksjane.actions.base.BaseAction;
import com.dsiksjane.common.CommonMethods;
import com.dsiksjane.common.MailerService;

import lombok.Getter;
import lombok.Setter;

@Component
@Getter
@Setter
public class SampServicesAction extends BaseAction {

//service
@Autowired
private MailerService mailerService;

@Autowired
Environment env;

private SampServicesCO sampServicesCO;

public String requestQuote() throws Exception {
    
    //Here, I cannot get the file. It is null 
    File file = sampServicesCO.getRequirementFile();
    
    mailerService.sendEmail( sampServicesCO.getCompanyEmail(), env.getRequiredProperty("mail.smtp.subject"), sampServicesCO.getDescription(), file );
    
    setJsonData(CommonMethods.returnJson( "1", "We received your inquiry, will get back shortly!" ));
    
    return SUCCESS;
    
}

}

标签: javajquerystruts2

解决方案


推荐阅读