- 浏览: 56925 次
- 性别:
- 来自: 安徽
文章分类
最新评论
-
nhm_lxy:
ViolateRecordDto dto=new Viola ...
j2ee Struts2.0 下的文件上传一些东西
最近忙于实现导出Excel功能,在boss的建议下,决定使用poi导出excel文件
在的我的应用中我导入的poi-<chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on">2.5.1</chsdate>.jar 存放路径lib下即可。
Poi与Struts2的联合使用 我觉的最重要的是Struts2的文件配置了
下面的导出方法:没有使用Excel模板
我的配置文件是:
<action name="pointDetailsToExcel" class="pointDetailsAction" method="listBillDetailsToExcel">
<!-- Result返回结果为InputSream对象,并处理下载文件的类型—->
<result name="success" type="stream">
<!-- contentType 指定下载文件的文件类型 —— application/vnd.ms-excel --->
<param name="contentType">application/vnd.ms-excel</param>
<!--返回流 excelStream为action中的流变量名称 -->
<param name="inputName">excelStream</param>
<!-- attachment 这个位置的参数挺特殊的,可以设置成下载时,是否出现个下载提示框,或者直接下载之类的,怎么设置忘了,那个小本子找不到了 filename指定生成的文件名字(这种方式合适动态生成文件名,比如做报表时,一般都要说是几月的统计数据之类)为action中变量
${downloadFileName} 可以处理中文问题 详见Blog http://www.360doc.com/content/09/1122/22/144699_9566346.shtml-->
<param name="contentDisposition">attachment;filename="${downloadFileName}"
</param>
<param name="bufferSize">1024</param>
</result>
<result name="error">/comm/error.jsp</result>
</action>
整个配置文件中最重要的两个变量就是 excelStream、downloadFileName,
inputName 流对象名 —— 比如这里写excelStream,它就会自动去找Action中的getInputStream方法。contentDisposition 使用经过转码的文件名作为下载文件名 —— 默认格式是attachment;filename="${ downloadFileName }",将调用该Action中的ge tDownloadFileName方法。
这两个变量一定要在action中有定义,否则会报错
我的jsp文件:
<a href="#" onClick="Redirect();">
<img src='<%=ctxPath%>/image/admin/btn_search.gif'/>导出Excel</a>
对应的js文件:
function Redirect(){
document.mainForm.action= "pointDetailsToExcel.do";
document.mainForm.submit();
}
对应的action.java文件:
private InputStream excelStream; //输入流变量
private String downloadFileName;
public InputStream getExcelStream() {
return excelStream;
}
public void setExcelStream(InputStream excelStream) {
this.excelStream = excelStream;
}
//处理下载时 文件名是中文的方法:
public String getDownloadFileName() {
SimpleDateFormat sf = new SimpleDateFormat( "yyyy-MM-dd ");
String downloadFileName= (sf.format(new Date()).toString())+"会员消费明细统计.xls";
try{
downloadFileName=new String(downloadFileName.getBytes(),"ISO8859-1");
}catch(UnsupportedEncodingException e){
e.printStackTrace();
}
return downloadFileName;
}
public void setDownloadFileName(String downloadFileName) {
this.downloadFileName = downloadFileName;
}
//action中的方法
public String listBillDetailsToExcel() throws Exception {
try{
page = new Page();
page.setPageSize(10000);
page.setStartIndex(0);
AccountDto accountDto = (AccountDto)session.get(Constants.USER_SESSION_KEY);
orgs = organizationService.getOrganizationTree(accountDto.getOrgCode());
if (orgId==0)
{
orgId=accountDto.getOrgId();
}
page = pointDetailsService.getPointDetailsPage(page, orgId,Begin,End);
list=page.getResult();//生成的list
excelStream=pointDetailsToExcelService.exportPointDetails(list);
return SUCCESS;
}catch (ServiceException e) {
e.printStackTrace();
return ERROR;
}
}
对应的Service实现类
package com.dbw.mps.service.impl;
import com.dbw.core.exception.ServiceException;
import com.dbw.core.service.impl.ServiceImpl;
import com.dbw.mps.dto.PointBillDto;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.dbw.mps.service.IPointDetailsToExcelService;
public class PointDetailsToExcelServiceImpl extends ServiceImpl
implements IPointDetailsToExcelService {
public InputStream exportPointDetails(List list) throws ServiceException{
// 创建一个HSSFWorkbook
HSSFWorkbook wb = new HSSFWorkbook();
// 由HSSFWorkbook创建一个HSSFSheet
HSSFSheet sheet = wb.createSheet();
// 由HSSFSheet创建HSSFRow
HSSFRow row = sheet.createRow((short)0);
HSSFCell cell = row.createCell((short) 0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("消费日期");
cell = row.createCell((short) 1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题2");
cell = row.createCell((short) 2);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题3");
cell = row.createCell((short) 3);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题4");
cell = row.createCell((short) 4);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题5");
cell = row.createCell((short) 5);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题6");
cell = row.createCell((short) 6);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题7");
cell = row.createCell((short) 7);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题8");
cell = row.createCell((short) 8);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题9");
cell = row.createCell((short) 9);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题10");
cell = row.createCell((short) 10);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题11");
cell = row.createCell((short) 11);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("标题12");//上面是导出Excel的表头
///下面的是根据list 进行遍历循环 想下面的单元格 塞值(这篇笔记之前发表不了,后来发现是我的表头汉字 有敏感字,故改成标题)
for (int i = 1; i < list.size() + 1; i++) {
PointBillDto dto =(PointBillDto) list.get(i-1);;
row = sheet.getRow(i);
if(row == null)
row = sheet.createRow((short)i);
cell = row.getCell((short)0);
if(cell == null)
cell = row.createCell((short)0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(dto.getAddTime()== null?"":dto.getAddTime().toString());
cell = row.getCell((short)1);
if(cell == null)
cell = row.createCell((short)1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((String)dto.getOperatorName());
cell = row.getCell((short)2);
if(cell == null)
cell = row.createCell((short)2);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((String)dto.getBillNo());
cell = row.getCell((short)3);
if(cell == null)
cell = row.createCell((short)3);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((String)dto.getCardNo());
cell = row.getCell((short)4);
if(cell == null)
cell = row.createCell((short)4);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((String)dto.getCustomerName());
cell = row.getCell((short)5);
if(cell == null)
cell = row.createCell((short)5);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((String)dto.getCarNo());
cell = row.getCell((short)6);
if(cell == null)
cell = row.createCell((short)6);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(dto.getCashValue().toString());
cell = row.getCell((short)7);
if(cell == null)
cell = row.createCell((short)7);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((Integer)dto.getPointValue());
cell = row.getCell((short)8);
if(cell == null)
cell = row.createCell((short)8);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((Integer)dto.getGainedPoint());
cell = row.getCell((short)9);
if(cell == null)
cell = row.createCell((short)9);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(dto.getTotalValue().toString());
cell = row.getCell((short)10);
if(cell == null)
cell = row.createCell((short)10);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((Integer)dto.getRemainPoint());
cell = row.getCell((short)11);
if(cell == null)
cell = row.createCell((short)11);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue((Integer)dto.getAccumulatePoint());
}
//使用apache的commons-lang.jar产生随机的字符串作为文件名
String fileName=RandomStringUtils.randomAlphanumeric(10);
//生成xls文件名必须要是随机的,确保每个线程访问都产生不同的文件
StringBuffer sb=new StringBuffer(fileName);
final File file = new File(sb.append(".xls").toString());
try {
OutputStream os=new FileOutputStream(file);
try {
wb.write(os);
os.close();
} catch (IOException e) {
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
InputStream is=null;
try {
is=new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return is;//返回的是一个输入流
}
}
发表评论
-
最近使用Fckeditor控件 也只能说简单的使用
2010-09-02 17:03 962最近在我们组中一个项目的开发的过程中应用户需求 ,用户需要发布 ... -
j2ee Struts2.0 下的文件上传一些东西
2010-09-19 11:35 962今天做的时候遇到了一个问题,如何从一个 .txt文本 中读取每 ... -
Google Map ApI 的 一个简单的应用
2010-11-12 21:03 1409Google地图API是一种通过JavaScript将Goog ... -
Google Map ApI 的简单运用(二)
2010-11-24 15:44 907下面的是Google Map地图异步加载 (通过js)和 通过 ... -
poi ,Struts2 导出Excel运用(二)
2010-12-03 17:12 1243在我的poi Struts2运用(一)中,很明显看到 ,这样只 ... -
poi ,Struts2 导出Excel运用(三)
2011-02-20 18:13 1374关于 改进的地方。原博 ... -
SiteMesh学习入门(转)
2011-02-24 21:10 643简介: sitemesh应用Decorato ... -
ActiveMQ 了解
2011-03-21 15:28 2382Active MQ 是JMS的一个具体实现,所以首先要对 ...
相关推荐
接下来,我们创建一个Struts2的动作类(Action),在这个类中定义导出Excel的方法。这个方法通常会接收一些参数,如查询条件,然后根据这些条件从数据库或其他数据源获取数据。例如: ```java public class ...
这个项目"Java Struts2+poi插件 实现导出Excel"就是结合这两个工具,为用户提供一个功能,能够将数据导出到Excel格式的文件中。 首先,让我们详细了解一下Struts2。Struts2的核心是Action,它负责接收请求、处理...
标题中的“POI+struts2导出Excel”是指使用Apache POI库与Struts2框架结合,实现在Web应用程序中导出数据到Excel的功能。Apache POI是Java平台上的一个开源项目,它允许开发者创建、修改和显示Microsoft Office格式...
总结起来,"使用poi从数据库导出excel表的示例"是一个结合了Struts1 MVC框架和Apache POI库的Java编程任务,它涉及数据库连接、SQL查询、Excel文件生成以及Web应用响应。这个过程不仅有助于数据的高效管理和分享,也...
本篇文章将深入探讨如何在Struts2框架中使用POI库来导出Excel文件。 首先,我们需要在项目中引入Apache POI库。可以通过Maven或Gradle将其添加到构建文件中。对于Maven,可以在pom.xml文件中添加以下依赖: ```xml...
在Struts2中,你可以创建一个Action类,该类包含一个导出Excel的方法,并将上述代码集成到其中。别忘了在Action中设置合适的Result类型,使得返回的内容被浏览器识别为Excel文件,通常可以设置Content-Type为...
Struts2 和 Apache POI 的结合使用主要集中在创建 Web 应用程序中导出 Excel 文件的功能上。Apache POI 是一个 Java 库,允许开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 Excel。而 Struts2 是一...
Struts2是一个流行的Java web开发框架,它提供了一种模型-视图-控制器(MVC)架构,使得开发者可以更方便地构建可维护、可扩展的Web应用。在本示例中,Struts2被用来处理HTTP请求和响应,协调前端视图与后端业务逻辑...
在Struts2框架中,实现Excel导出的功能主要依赖于Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。以下将详细介绍如何利用Struts2和POI实现Excel导出。 首先,你需要在项目中引入Apache POI库。...
在这个“struts2+poi导出excel表格完整例子”中,我们将深入探讨这两个工具如何协同工作,实现从Web应用导出数据到Excel电子表格的功能。 首先,让我们了解一下Struts2的工作原理。Struts2基于拦截器(Interceptor...
【基于Struts2 Spring iBatis POI开发的导出Excel实例详解】 在现代Web应用程序中,导出数据到Excel格式是一种常见的需求,这有助于用户分析、存储或共享信息。本实例将详细介绍如何利用Struts2、Spring和iBatis...
通过以上步骤,我们可以实现一个简单的Struts2应用,该应用能够根据用户请求,使用Apache POI库动态生成并导出Excel文件。在实际项目中,可能还需要考虑数据过滤、排序、分页等功能,以及与数据库的交互,这些都可以...
文件名暗示这是一个Struts2 Action类,用于处理导出Excel的请求。在Struts2中,Action类是业务逻辑的载体,处理HTTP请求,调用业务服务,准备数据,并返回一个Result指示视图如何展示。 6. **配置文件修改** 要使...
在 Java 开发中,如果你需要导出数据到 Excel,Apache POI 提供了高效的 API 来实现这一功能。在本文中,我们将深入探讨如何使用 POI 组件来创建和操作 Excel 文档。 1. **创建 Excel 文档对象** 创建一个 Excel ...
4. **配置Struts2 Action**:创建一个Struts2 Action类,声明一个方法用于导出Excel,该方法的返回类型应配置为一个特定的Result类型,如stream或者excel,这会使得Struts2将结果流直接发送到浏览器。 5. **设置...
1.本动态导入导出Excel工程导入Eclipse即可用行,支持所有版本的Excel导入导出。...2.程序使用Struts2+POI+SQLSever(SSH即Struts2+Hibernate+Spring)实现Excel动态数据导入和导出,压缩包内含程序源码文件。
- 创建Action:首先,我们需要在Struts2中创建一个Action类,该类包含一个方法,负责执行导出Excel的操作。 - 构建Excel:在Action的方法中,使用Apache POI创建HSSFWorkbook对象,代表Excel工作簿。接着,添加...
4. **Struts2配置**:为了实现在Struts2中调用POI方法,需要在struts.xml配置文件中定义一个Action,指定对应的类和方法。此外,可能还需要配置拦截器,比如`result`类型,以处理导出的结果。 5. **依赖管理**:在...
在这个“Struts1.2导出Excel表完美版”中,我们将深入探讨如何利用Struts1.2框架来实现这一功能。 首先,导出Excel表的核心技术是Apache POI库,这是一个用于读写Microsoft Office格式档案的Java库。在Struts1.2...