java - 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;
}
}
解决方案
推荐阅读
- reactjs - 如何将变量从子级传递给父级
- linux - 在部署到 AWS ECS 的 docker 实例中找不到目录?
- asp.net-core - ASP.NET Core (Blazor) 在启动时使用 Url 或虚拟路径加载客户特定的配置
- amazon-web-services - 如何从在 EKS/KOPS 集群下运行的 pod 访问 AWS?
- python - Tensorflow c_api (1.13.2) - Import LSTM .pb: Expected input[1] to be a control input
- stata - 如何在 Stata 中确定具有给定邮政编码的州?
- php - Laravel-8:php 工匠迁移不起作用
- cognos - Cognos 报告工作室从 2 月数据过滤到最后一个关闭月份
- excel - 如何使用 FIND 函数从 Excel 中的帐号中拆分名称?
- ssas - 如何在 SSAS 角色行过滤器上使用自联接 - Dax 函数