excelStream我正在尝试下载 Excel 文件。
在我的动作课上
public class ActivityTrackerExlReportAction extends BaseAction
{
private InputStream excelStream;
private UserMasterDTO userMasterDTO;
public InputStream getExcelStream()
{
return excelStream;
}
public void setExcelStream(InputStream excelStream) {
this.excelStream = excelStream;
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
WorkbookSettings wbSettings = new WorkbookSettings();
try
{
response.setHeader("Content-Disposition", "attachment; filename=/timesheet.xls");
wbSettings.setLocale(new Locale("en", "EN"));
WritableWorkbook workbook = Workbook.createWorkbook(outputStream, wbSettings);
workbook.createSheet("Report", 0);
WritableSheet excelSheet = workbook.getSheet(0);
service.createLabel(excelSheet);
service.createContent(excelSheet);
workbook.write();
ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
setExcelStream(inputStream);
workbook.close();
outStream.flush();
outStream.close();
}
catch(Exception e)
{
}
finally
{
// outStream.close();
}
return "generateReport
}
My struts.xml
包含:
<result type="stream" name="generateReport">
<param name="contentType">"application/vnd.ms-excel"</param>
<param name="inputName">excelStream</param>
<param name="bufferSize">1024</param>
</result>
我在用JXL
创建并编写 Excel 工作表。为什么我会收到错误以及如何摆脱它?找不到java.io.InputStream
与名字[excelStream]
在调用栈中
我的是堆栈跟踪:
java.lang.IllegalArgumentException:在调用堆栈中找不到名为 [excelStream] 的 java.io.InputStream。检查为此操作指定的标签。
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:237)
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
…………
EDIT
在新发布的代码中,您做了两件“坏”事:
1)你正在接受一个异常,这确实是错误的;
put a
e.printStackTrace();
在你的里面
catch(Exception e){}
块,你会看到可能被抛出、捕获但未显示的异常;
2)即使出现异常,您也会返回相同的结果,(这就是 99.9% 正在发生的事情);这将导致 Struts2 Stream 结果尝试到达从未初始化的 excelStream 变量(由于异常)。
如果发生错误,您应该返回全局(或本地)错误结果类型,并使用显示错误的 JSP,而不是 Stream 结果类型。
打印异常,更正代码,然后一切都会好起来:)
P.S:请避免直接写入响应,请使用 Stream 结果类型中的 contentDisposition。
错误是
<param name="inputName">excelstream</param>
应该
<param name="inputName">excelStream</param>
始终使用驼峰命名法(就像您在 Action 中所做的那样,但不是在 struts 配置中)。
显然 contentDisposition 应该被删除,或者设置一个适当的值,比如
<param name="contentDisposition">attachment; filename="myExcel.xls"</param>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)