struts 2 在调用堆栈中找不到名称为[excelStream]的java.io.InputStream

2024-01-04

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(使用前将#替换为@)

struts 2 在调用堆栈中找不到名称为[excelStream]的java.io.InputStream 的相关文章

随机推荐