我想将一些数据写入csv文件,用户应该可以通过浏览器下载。
@Actions({ @Action(value = "/downloadReport", results = { @Result(name = "success", type = "stream", params = {
"contentType", "${type}", "inputName", "stream", "bufferSize","2048", "contentDisposition",
"attachment;filename=\"${filename}\"" }) }) })
@SkipValidation
public String downloadReport() throws BaseAppException {
try {
filename =AdSkippingConstants.REPORT_FILE_NAME;
type = AdSkippingConstants.CSV_FILE_TYPE;
File file = new File(filename);
FileUtils.write(file, "Helloo World");
stream = new FileInputStream(file);
}
catch (IOException e) {
logger.error("Error occured while exporting error data", e);
}
return SUCCESS;
}
在jsp中我正在使用ajax调用
function exportAsCSV(){
$.ajax({
url: 'downloadReport.action?',
type: "POST",
success: function() {
//To Un Block the Change Password page if the page reloaded
//$('div.ui-dialog').unblock();
// $('#change_password_details_body').html(data);
},
error: function(){
//To Un Block the Change Password page if the page reloaded with error.
//$('div.ui-dialog').unblock();
}
});
}
我能够得到响应,甚至fileDownload = true即将响应,但仍然下载到csv选项没有在任何浏览器中打开,也请让我知道如何将html数据传递给动作以写入csv。< / p>
在jsp中,我使用此代码进行ajax调用
var gridModel = "gridModel";
var sortname = "1";
var sortorder = "asc";
var caption = '<s:text name="grid.label.heading" />';
var url = "getGridSearchResults.action";
init.push(function() {
loadTable("gridtable", url, gridModel, columnDefs, columns, sortname,
sortorder, caption);
});
<table cellpadding="0" cellspacing="0" border="0" class="table table- striped table-bordered" id="gridtable"></table>
所以使用ajax调用我正在加载表的数据。
答案 0 :(得分:1)
您不需要AJAX。这是一个普遍的误解。
您只需要对返回stream
结果的操作执行调用,并使用contentDisposition: attachment
HTTP标头。
这将告诉浏览器下载文件而不是内联打开它。
编辑:如果您需要将HTML表中的数据发送到操作,则需要
<s:property/>
标签打印的价值相同(或其他); list[%{#status.index}].attribute
符号将不同记录发布为集合的不同元素。答案 1 :(得分:0)
我用它完成了:
ActionContext.getContext().getSession().put("RESULTS_GRID", searchResultsForDownload);
然后检索我的DownLoadAction中的列表以获取数据并使用BufferedWriter写入csv。