当前位置: 代码迷 >> Java Web开发 >> struts2导出excel无法找到InputStream,该如何解决
  详细解决方案

struts2导出excel无法找到InputStream,该如何解决

热度:4732   发布时间:2016-04-10 23:13:09.0
struts2导出excel无法找到InputStream
错误:java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [] in the invocation stack. Check the <param name="inputName"> tag specified for this action

说是我栈中没有excelStream。

环境:struts2.3.15+spring3+hibernate4
其他环境有:druid+javamelody

使用的是jxl导出excel
从数据库查询数据,不是读取的文件。
action:


public String filename;
public InputStream excelStream;
get、set方法省略....

public String exportExcel() {
ByteArrayOutputStream targetFile = new ByteArrayOutputStream();
try {
WritableWorkbook workbook = Workbook.createWorkbook(targetFile);
WritableSheet sheet = workbook.createSheet("测试报告", 0);
       ......其他省略
        workbook.write();
workbook.close();
        } catch (Exception e) {
System.out.println("在输出到EXCEL的过程中出现错误,错误原因:" + e.toString());
}
excelStream = new ByteArrayInputStream(targetFile.toByteArray());
       System.out.println("===================================="+excelStream);
}

struts配置文件:

<result name="excel" type="stream">
<param name="contentType">application/vnd.ms-excel</param>
<param name="inputName">excelStream</param>
<param name="contentDisposition">attachment;filename="test.xls"</param>
<param name="bufferSize">1024</param>
</result>

打印出来的inputStream:
====================================java.io.ByteArrayInputStream@124a60b
不是空的啊。
在struts2.18中也是使用的同样的方法,可以导出,但这是什么个情况?,请教大神,很急!!!

------解决方案--------------------
你这个action方法中没有return?!
------解决方案--------------------
如果没有读到这个excel,也就是没有流也会出现这个这个错误的。
------解决方案--------------------
既然用struts了,就要遵从人家的规则,你把流传给excelStream试试,有set、get方法有啥用,又没值。
------解决方案--------------------
<!-- 导出excel -->
<action name="daochuexcel" class="com.wuliuguanli.action.DaochuExcelAction">   
            <result name="excel" type="stream">   
                <param name="contentType">application/vnd.ms-excel</param>  
                <param name="contentDisposition"> attachment;filename="${fileName}.xls"</param>  
                <param name="inputName">excelStream</param>  
            </result>   
    </action> 

package com.wuliuguanli.action;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

import javax.annotation.Resource;

import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Controller;

import com.wuliuguanli.WuliuguanliAction;
import com.wuliuguanli.dao.WuliuguanliDao;
import com.wuliuguanli.entity.Business;
import com.wuliuguanli.util.WuliuguanliException;

@Controller
public class DaochuExcelAction extends WuliuguanliAction{
@Resource WuliuguanliDao dao;
//input
private String ids;

private String fileName;//文件名
//output
private String tempPath;//临时文件目录

public String execute(){
initExcel();
return "excel";
}

public void initExcel(){
String[] ids1=ids.split("-");
// System.out.println(ids1.length);
// for(int i=0;i<ids1.length;i++){
// System.out.println(ids1[i]);
// }
List<Business> bs=new ArrayList<Business>();
int i=0;
for(i=0;i<ids1.length;i++){
Business b=new Business();
  相关解决方案