`
lilerwei
  • 浏览: 52598 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

使用struts2控制excel文件下载

阅读更多

关于使用struts2控制excel文件下载在这里只是介绍其中的一种方法

一、关于jsp页面

expGridToExcel : function(condition) {
		/**
		 * 导出数据到excel
		 */
		var cm = this.contentPanel.getColumnModel();
		var colHeaderStr = "";
		var colDataIndexStr = "";
		for (var i = 1; i < cm.getColumnCount(); i++) {
			if (!cm.isHidden(i)) {
				if (cm.getDataIndex(i)) {
					colHeaderStr = colHeaderStr + cm.getColumnHeader(i) + ",";
					colDataIndexStr = colDataIndexStr + cm.getDataIndex(i)
							+ ",";
				}
			}
		}
		condition['colHeaderStr'] = colHeaderStr;
		condition['colDataIndexStr'] = colDataIndexStr;
		/*if (!Ext.fly('test')) {
			var frm = document.createElement('form');
			frm.id = 'test';
			frm.name = id;
			frm.style.display = 'none';
			document.body.appendChild(frm);
		}
		Ext.Ajax.request({
					url : '../map/busReportAction!expOldAdv',
					form : Ext.fly('test'),
					method : 'POST',
					isUpload : true,
					params : condition
				});*/
		window.open('../map/busReportAction!expOldAdv?'+encodeURI(encodeURI($.param(condition))));
	},


说明:colDataIndexStr :指的是对应属性名字,比如: tent,begintime,endtime,telephone

colHeaderStr :指的是表头名字,比如: 广告 ID, 广告商 , 广告内容等。

二、关于action层

public String expOldAdv() throws UnsupportedEncodingException {

		try {
			List<BusOldadvertisementinfo>  list = null;
			BusOldadvertisementinfo oldAd = new BusOldadvertisementinfo();
			oldAd.setCompanyname(getDecodeData(companyName));
			String beginTimeDecode = this.getDecodeData(beginTime);
			String endTimeDecode = this.getDecodeData(endTime);

			if (beginTimeDecode != null && beginTimeDecode.length() == 10) {
				oldAd.setBegintime(DateUtil.parseYYYYMMDDDate(beginTimeDecode));
			}
			if (endTimeDecode != null && endTimeDecode.length() == 10) {
				oldAd.setEndtime(DateUtil.parseYYYYMMDDDate(endTimeDecode));
			}
			// 给出查询的条件,以及页,根据条件得到要导出的数据组成的集合
			list = busOldadvertisementinfoService.export(oldAd, start, limit);

			String[] colHeader = URLDecoder.decode(
					URLDecoder.decode(colHeaderStr, "UTF-8"), "UTF-8").split(
					",");
			String[] colDataIndex = URLDecoder.decode(
					URLDecoder.decode(colDataIndexStr, "UTF-8"), "UTF-8")
					.split(",");
			
		    // 读取模板Excel
			HSSFWorkbook workbook = new HSSFWorkbook();
			HSSFSheet sheet = workbook.createSheet();
			workbook.setSheetName(0, Constance.OLDADVSHEETNAME);
			// 设置字体颜色
			HSSFFont font = workbook.createFont();
			font.setColor(HSSFFont.COLOR_RED);
			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
			// 设置报表中单元格的样式
			HSSFCellStyle style = workbook.createCellStyle();
			style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
			style.setFont(font);

			int colCount = colHeader.length;
			CellRangeAddress cellas = new CellRangeAddress(0, 0, 0,
					colCount - 1);

			sheet.addMergedRegion(cellas);
			HSSFRow headerRow = sheet.createRow(0);
			HSSFCell headerCell = headerRow.createCell(0);
			headerCell.setCellStyle(style);
			headerCell.setCellValue(Constance.OLDADVCELLVALUE);

			int size = 0;
			if (list != null) {
				size = list.size();
			}
			for (int rownum = 1; rownum < size + 2; rownum++) {
				HSSFRow r = sheet.createRow(rownum);
				for (int cellnum = 0; cellnum < colHeader.length; cellnum++) {
					if (rownum == 1) {
						HSSFCell cell = r.createCell(cellnum);
						cell.setCellValue(new HSSFRichTextString(
								colHeader[cellnum]));
						cell.setCellStyle(style);
					} else {
						//为每一行的创建单元格
						HSSFCell cell = r.createCell(cellnum);
						//为每个单元格赋值
						cell.setCellValue(new HSSFRichTextString(this.getDataDynamic
(list.get(rownum - 2),colDataIndex[cellnum])));
						//为每个单元格设置样式
						cell.setCellStyle(style);
					}

				}

			}
			//确定要导出的文件的名字
			fileName = new SimpleDateFormat("yyyy-MM-dd").format(new Date())
					+ Constance.OLDADVCELLVALUE + ".xls";
			//根据路径名和文件名创建一个FILE实例
			File file = new File(ServletActionContext.getServletContext()
					.getRealPath(inputPath), fileName);
			//将excel模板连同数据,写到指定的file中
			workbook.write(new FileOutputStream(file));


		} catch (Exception e) {
			log.error("GetBusDataAction  queryAdv() failed", e);
		} finally {

		}
		return SUCCESS;

	} 

     /**
	 * 根据属性名称动态取出对应的值(反射读取某个对象中的某个get方兴得到对应属性的值)
	 * 
	 * @param obj 集合中的某一个对象
	 * @param property  对象中的某个属性
	 * @return
	 */
public String getDataDynamic(Object obj, String property) {
		Class c = obj.getClass();
		try {
			//根据属性名称取出field
			Field field = c.getDeclaredField(property);
			Method method;
			if (field.getType().equals(Boolean.TYPE)) {
				String methodName = "is"
						+ property.substring(0, 1).toUpperCase()
						+ property.substring(1);
				method = c.getDeclaredMethod(methodName);
			} else {
				String methodName = "get"
						+ property.substring(0, 1).toUpperCase()
						+ property.substring(1);
				method = c.getDeclaredMethod(methodName);
			}
			//反射读取obj类中的method方法
			Object o = method.invoke(obj);
			if (o != null) {
				if (o instanceof Date) {
					return DateUtils.format((Date) o, Constance.DATEFORMATE);
				} else {
					if (property.equals("isaudit")) {
						if ((Long) o == 1) {
							return "通过审计";
						} else if ((Long) o == 0) {
							return "未通过审核";
						} else {
							return "未做处理";
						}
					}
					return o.toString();
				}
			}
		} catch (SecurityException e) {
			log.debug(e.getMessage());
			return "";
		} catch (NoSuchFieldException e) {
			log.debug(e.getMessage());
			return "";
		} catch (NoSuchMethodException e) {
			log.debug(e.getMessage());
			return "";
		} catch (IllegalArgumentException e) {
			log.debug(e.getMessage());
			return "";
		} catch (IllegalAccessException e) {
			log.debug(e.getMessage());
			return "";
		} catch (InvocationTargetException e) {
			log.debug(e.getMessage());
			return "";
		}
		return "";

	}

	public InputStream getInputStream
() throws Exception {
		String url = inputPath + "/" + fileName;
		int size = url.length() - 1;
		for (int i = 0; i < size; i++) {
			url = url.replace("\\", "/");
		}
		System.out.println("url="+url);
		//返回读取指定的文件流
		return ServletActionContext.getServletContext()
				.getResourceAsStream(url);

	}


三、关于配置文件说明
  
        <action name="busReportAction" class="busReportAction">
        	<param name="inputPath">/reportManage/reportFile/qiantai</param>
			<result name="success" type="stream
">
				<param name="contentType">application/vnd.ms-excel;charset=ISO8859-1</param>
				<param name="inputName">inputStream</param>
				<param name="contentDisposition">inline;filename="${fileName}"</param>
                                <param name="bufferSize">4096</param>
			</result>
        </action>

说明:
contentType:指定被下载文件的类型
inputName:指定被下载文件的入口输入流(它的参数的值就是方法去掉get前缀,首字母小定的字符串)
contentDisposition:指定下载的文件名
bufferSize:指定下载文件时的缓冲大小


总结:总之下载文件就是先通过一定的方法,将要导出的文件流写到服务器上也就是某个位置,然后通过struts2的
配置文件去读这个文件,就是这样一个简单的过程,至于中间如何将正确的数据写到文件中,方法有很多,我这里只是
介绍了其中的一种,通过反射的机制读取数据。
将此方法和大家分享一下,如果有更好的方法还请留言,大家共同分享~~~

分享到:
评论

相关推荐

    Struts2文件流方式导出下载excel、Txt、image图片

    通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...

    Struts2+Excel导出Demo,测试可用带JAR包

    Struts2是一个强大的MVC(模型-视图-控制器)框架,被广泛应用于Java Web开发中,它提供了灵活的控制层结构,使得开发者能够构建可维护性和可扩展性极强的Web应用程序。Excel则是一种流行的电子表格软件,常用于数据...

    Struts2+Excel导入功能 完整美运行有JAR包

    在Struts2中实现Excel导入功能,可以让用户上传Excel文件,然后在服务器端进行数据处理,例如存储到数据库或者进行数据分析。 在描述中提到的“完整美运行有JAR包”,意味着这个压缩包可能包含了所有必要的库文件,...

    struts2+poi实现导出Excel文件

    Struts2 和 Apache POI 的结合使用主要集中在创建 Web 应用程序中导出 Excel 文件的功能上。Apache POI 是一个 Java 库,允许开发者创建、修改和显示 Microsoft Office 格式的文件,其中包括 Excel。而 Struts2 是一...

    Struts2+JXL 下载 Excel 文档

    3. **返回结果**:当Action执行完成,Struts2框架会根据配置的result类型(这里为stream)将excelStream内容写入HTTP响应,用户即可下载Excel文件。 这个过程中,开发者需要注意一些关键点,比如异常处理、内存管理...

    struts2 poi导出到excel

    Struts2是一个基于MVC设计模式的Java EE框架,它提供了强大的动作控制、拦截器和结果类型等功能,使得Web应用的开发更加简洁高效。而Apache POI是一个开源库,专门用于读写Microsoft Office格式的文件,包括Excel。 ...

    Struts2 poi动态导入导出Excel源码示例

    Struts2是一个流行的Java web开发框架,它提供了一种模型-视图-控制器(MVC)架构,使得开发者可以更方便地构建可维护、可扩展的Web应用。在本示例中,Struts2被用来处理HTTP请求和响应,协调前端视图与后端业务逻辑...

    struts2文件上传下载

    例如,可以使用Apache POI库来生成Excel文件,或者使用OpenCSV库来生成CSV文件。生成文件后,可以调用上面提到的下载方法来提供下载。 总的来说,"struts2文件上传下载"涵盖了Web开发中的基础功能,对于任何需要...

    JSP Struts2 分页 导出Excel

    - 当用户选择导出Excel时,Action创建Excel文件,设置响应头并返回。 - 用户在浏览器中触发文件下载,保存到本地。 通过以上步骤,我们可以构建一个功能完整的Web应用,实现从查询、分页到导出Excel的流程。在...

    struts2+jxl导出excel

    同时,合理控制Excel文件的大小,防止内存溢出。 通过这种方式,你可以结合Struts2的控制层和JXL的Excel操作,轻松实现web应用的Excel导出功能。不过,需要注意的是,随着技术的发展,现在有更多现代化的库(如...

    struts2+poi实现excel表格导出

    Struts2和Apache POI是Java开发中两个重要的工具,它们在处理Web应用程序中的数据导出,特别是Excel表格导出方面发挥着重要作用。Struts2是一个基于MVC设计模式的Web应用框架,它极大地简化了Java Web开发。而Apache...

    struts2实现excel导出

    Struts2是一个流行的Java web开发框架,它提供了一种优雅的方式来构建MVC(模型-视图-控制器)架构的应用程序。在Struts2中实现Excel导出是一项常见的需求,这通常涉及到将数据库或其他数据源中的数据转换为Excel...

    struts2+poi实现excel文件的导出

    6. 最后,在 Action 方法返回 "success",Struts2 将使用配置的 `stream` 结果来处理这个字节流,从而完成 Excel 文件的导出。 这个过程不仅限于简单的数据导出,你还可以根据需求实现更复杂的功能,如合并单元格、...

    Struts文件上传和Excel导出

    可以提供下载链接让用户下载生成的Excel文件。 5. **安全考虑**:在导出过程中,要注意避免潜在的安全问题,如内存溢出(大量数据时)、Excel公式注入等。 **Hibernate集成** 1. **实体类**:创建员工和部门的...

    POI + Struts2 实现Excel导出工具包

    在Struts2中,我们可以利用Action类和Result类型来处理请求和响应,结合POI库,可以实现在服务器端生成Excel文件并返回给客户端下载。 以下是实现Excel导出的基本步骤: 1. **引入依赖**:首先,你需要在项目的pom...

    struts2结合ext3批量下载文件

    通过以上步骤,我们可以实现一个在Struts2框架下,利用Ext3创建前端交互界面,后端使用Apache POI处理Excel文件,TrueZip打包文件,提供批量下载服务的功能。这不仅可以提高用户的下载效率,还简化了后台处理大量...

    Excel 导出 struts2 spring hibernate

    总结起来,本主题涵盖的核心知识点包括Struts2的Action、Spring的依赖注入和事务管理、Hibernate的数据库操作、Apache POI库的使用以及文件上传和下载的处理。通过理解这些内容,开发者能够构建起一个完整的、支持...

    struts2+poi导出excel表格完整例子

    最后,将工作簿写入到HttpServletResponse的输出流中,这样浏览器就能接收到Excel文件并下载。为了确保导出过程的性能,通常会使用流式处理,避免一次性加载所有数据到内存。 在实际的代码实现中,可能包含以下几个...

    Struts2+POI3.7做excel导入

    在本项目中,“Struts2+POI3.7做excel导入”意味着我们将利用Struts2的文件上传功能结合POI库,实现用户从网页上选择Excel文件并将其数据导入到系统中的功能。 首先,我们需要在Struts2的配置文件(struts.xml)中...

    struts1.2+extjs+导出excel项目

    通过创建HSSFWorkbook对象,设置工作表、单元格内容,然后将其写入到Servlet的OutputStream,客户端就可以接收到一个可供下载的Excel文件。 在项目实施过程中,开发者需要注意以下几点: 1. **集成配置**:确保...

Global site tag (gtag.js) - Google Analytics