在struts2.0中点击导出按钮将信息导出为excel文件的实现,当点击按钮时候,需要将生成的excel的文件转换为输出流在页面下载提供用户保存。
在struts2.0中action的代码方法为:
public class FaultAction extends BaseStruts2Action
/**
* 点击导出导出页面
* @return
*/
public String faultExport(){
return SUCCESS;
}
/**
* 报表附件文件下载
* @return
* @throws IOException
*/
public InputStream getInputStream() throws Exception{
//读取相关的属性文件
Properties properties=new Properties();
properties.load(FaultAction.class.getResourceAsStream("/resource_excel.properties"));
String headerTitlesStr=properties.getProperty("headerTitles");
//headerTitlesStr=new String(headerTitlesStr.getBytes(),"utf-8");
String titlesStr=properties.getProperty("titles");
String[] headerTitltes=headerTitlesStr.split(":");
String[] titles=titlesStr.split(":");
if(logger.isDebugEnabled()){
logger.debug("故障汇总统计报告:"+headerTitlesStr);
}
fileName =properties.getProperty("fileName");
fileName=EncodeUtils.urlEncode(fileName);
//fileName=new String(fileName.getBytes("utf-8"),"ISO8859-1");
String title="故障反馈及处理跟踪表";
List<Map<String, Object>> faultMapList=faultService.queryFalutReportMap(faultCon);
//遍历并存储所有的项目
Map<String,List<Map<String, Object>>> faultCollMap=new HashMap<String,List<Map<String, Object>>>();
Map<String,String> projectCollMap=new HashMap<String,String>();
if(CollectionUtils.isNotEmpty(faultMapList)){
for(Map<String, Object> faultMap : faultMapList){
String projectId=faultMap.get("projectId").toString();
String projectName=faultMap.get("projectName").toString();
List<Map<String, Object>> tempFaultMapList=null;
if(faultCollMap.containsKey(projectId)){
tempFaultMapList=faultCollMap.get(projectId);
}else{
//存储项目名称信息
projectCollMap.put(projectId, projectName);
//创建故障集合并存储故障
tempFaultMapList=new ArrayList<Map<String, Object>>();
}
tempFaultMapList.add(faultMap);
faultCollMap.put(projectId, tempFaultMapList);
}
}
ExcelVO excelVO=new ExcelVO();
excelVO.setPath(fileName);
excelVO.setPrefix("xls");
if(MapUtils.isNotEmpty(faultCollMap)){
Set<Entry<String,List<Map<String, Object>>>> faultset=faultCollMap.entrySet();
for (Entry<String,List<Map<String, Object>>> entry : faultset) {
String projectId=entry.getKey();
List<Map<String, Object>> faultInfoList=entry.getValue();
String projectName=projectCollMap.get(projectId);
SheetVO sheetVO=new SheetVO();
//表中中的表头
sheetVO.setHeaderTitle(headerTitltes);
//每行绑定的字段
sheetVO.setTitles(titles);
sheetVO.setTitle(title);
//表中的数据
sheetVO.setSheetContentMap(faultInfoList);
//表头起始的行数
sheetVO.setRowNum(1);
//Sheet中标题
sheetVO.setSheetName(projectName);
List<SheetVO> sheets=null;
if(excelVO.getSheets()!=null){
sheets=excelVO.getSheets();
}else{
sheets=new ArrayList<SheetVO>();
}
sheets.add(sheetVO);
excelVO.setSheets(sheets);
}
}
InputStream in =excelService.createExcelService(excelVO);
return in;
}
struts2.0的配置如下:
<!-- 故障汇总统计功能 --> <action name="faultExport" method="faultExport" class="com.easyway.eamsg.faultmgt.action.FaultAction"> <result name="success" type="stream"> <param name="contentType">application/octet-stream;charset=ISO8859-1</param> <param name="inputName">inputStream</param> <param name="contentDisposition">attachment;filename="${fileName}"</param> <param name="bufferSize">10240</param> </result> </action>
jsp页面一个简单的按钮的:
<td width="10%" class="font9_cu_9" >
<input type="button" value="导出Excel" class="btn01" οnclick="javascript:excelInfo()">
</td>
function excelInfo(){ //验证时间 var beginTime = document.getElementById("beginTime").value; beginTime =beginTime.replace(/(^\s*)|(\s*$)/g,""); if(beginTime==''){ alert("请输入故障发生起始时间!"); return; } //截至时间 var endTime = document.getElementById("endTime").value; endTime =endTime.replace(/(^\s*)|(\s*$)/g,""); if(endTime==''){ alert("请输入故障截至时间!"); return; } var faultConitemId = document.getElementById("faultConitemId").value; document.forms[0].action="${pageContext.request.contextPath }/faultMgt/faultExport.action?faultCon.startDate="+beginTime+"&faultCon.endDate="+endTime+"&faultCon.itemId="+faultConitemId+"&time="+new Date().getTime(); document.forms[0].submit(); }