想把 jsp从数据库根据条件查询出来的数据 直接通过一个按钮控制 点击按钮 调用一个方法 将table里的数据导入到excle中 求这个方法的写法。。 菜鸟级别 忘详细说明 希望附带代码jspexcle
解决方案 »
- 一次读取50条数据,连接数小于10,请问是读取sql快还是读取文件快
- 找个java老师指点迷津
- [新手求助高人]关于j2ee学习的请教
- Quartz中JobStoreTx与把任务持久化到xml文件中的plug_in有什么区别吗?
- WebServices传输文件的问题
- CXF webservice服务端查询数据库出错
- 如何在java程序中获取Weblogic服务器的系统信息
- 小弟初学,请教J2EE的环境怎么配?
- j2ee中的EAR 和war是怎么生成的,具体用什么工具,怎么生成的
- Jbuilder 开发Web Service的错误
- 这个标签有什么问题么 ,为什么不能执行5次?
- 用java画统计饼状图
http://www.blogjava.net/itwangyuxia/archive/2011/12/20/366820.html
一种是用后台 jxl 或 poi 生成
http://www.cnblogs.com/raymond19840709/archive/2008/06/26/1230289.html网上使用帮助都挺多的而且比较详细
原来我做过一个报表查询的,自动返回execl报表,应该和你要求差不多,需要的话引用下,晚上回去找找。
[code=java]
if("excel".equals(request.getParameter("OutputType"))) {
response.reset();
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.addHeader("Content-Disposition","attachment; filename=\""+java.net.URLEncoder.encode("demo.xls","utf-8")+"\"");
}else{
response.setContentType("text/html;charset=UTF-8");
out.println("<link href=\"/anareport/css/AnaReport_Standard.css\" rel=\"stylesheet\" type=\"text/css\">");
out.println("<script type=\"text/javascript\" src=\"/anareport/common/js/Common.js\"></script>");
}
%>
<meta http-equiv="Content-Type" content="application/vnd.ms-excel;charset=UTF-8">
<script type="text/javascript" src="/anareport/common/tableShowJs/TableSorter.js"></script>
<script type="text/javascript" defer="defer">
function ShowExcel() {
var oriAction =fm.action;
var oriTarger = fm.target;
fm.target = "_blank";
fm.method="POST";
fm.action="/anareport/newpolicylist.do?actionType=query&OutputType=excel";
fm.submit();
fm.target = oriTarger;
fm.action = oriAction;
}
function tableSort(){
new TableSorter("ResultTable");
}
</script>
[/code]
没整理 项目中直接粘过来的 你自己参考一下吧
{
try{
var curTbl = document.getElementById(tableId);
var oXL = new ActiveXObject("Excel.Application");
//创建AX对象excel
var oWB = oXL.Workbooks.Add();
//获取workbook对象
var oSheet = oWB.ActiveSheet;
var lenRow = curTbl.rows.length;
//取得表格行数
for (i = 0; i < lenRow; i++)
{
var lenCol = curTbl.rows(i).cells.length;
//取得每行的列数
for (j = 0; j < lenCol; j++)
{
oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText;
}
}
oXL.Visible = true;
//设置excel可见属性
}catch(e){
if((!+'\v1')){ //ie浏览器
alert("无法启动Excel,请确保电脑中已经安装了Excel!\n\n如果已经安装了Excel,"+"请调整IE的安全级别。\n\n具体操作:\n\n"+"工具 → Internet选项 → 安全 → 自定义级别 → ActiveX 控件和插件 → 对未标记为可安全执行脚本的ActiveX 控件初始化并执行脚本 → 启用 → 确定");
}else{
alert("请使用IE浏览器进行“导入到EXCEL”操作!"); //方便设置安全等级,限制为ie浏览器
}
}
}
这个方法测试后ie下可用,个人认为后台处理最好,不需要考虑浏览器兼容性,而且灵活性更高一些,熟悉了的话一张简单的报表导出很快就可以做出来了,除非有那种很恶心的单元格合并,然后要求导出的表格能够精确打印,恶心的按规则分页打印什么的,还要好看还要好用,确实很费时间。
* 获取导出数据总条数
* @return
*/
public Long getDownFileDataCount()
{
return getResultCount();
}
/**
* 设置导出的查询语句
*/
public void setDownFileQuerySql()
{
//获取查询语句
createQuery();
String ejbql = getEjbql();
//导出的查询语句(列名:对象的属性名)
String querySql = "select tblSysTransaction.createDate, tblSysTransaction.tranCode, " +
" tblSysTransaction.tranBalance, tblSysTransaction.createUser, tblSysTransaction.agentRe ";
setEjbql(ejbql.replace("select tblSysTransaction", querySql));
}
/**
* 获取导出结果集
*/
@SuppressWarnings("unchecked")
public List<Object[]> getDownFileData(Long startNum)
{
int startNums = Integer.parseInt(Long.toString(startNum));
// setDownFileQuerySql();
createQuery();
return super.createQuery()
.setFirstResult(startNums)
.setMaxResults(10000)
.getResultList();
}
/**
* 导出下载文件
*/
public void exportCsv()
{
//获取存放文件的文件夹路径
String folderPath = frontUtilService.createDownZipFolder();
//查询导出数据的总条数
Long countNum = getDownFileDataCount();
if (countNum == 0)
{
//"数据为空"
}
Long pageSize = countNum%10000 == 0 ? countNum/10000 : (countNum/10000)+1;
String fileName = folderPath
.concat(UUID.randomUUID().toString().replaceAll("-", ""))
.concat(".csv");
FileOutputStream fos = null;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
try
{
fos = new FileOutputStream(fileName);
osw = new OutputStreamWriter(fos, "GB18030");
bw = new BufferedWriter(osw);
//表头
bw.write("序号,交易日期,交易类型,短信收支条数\r\n");
int num = 1;
//循环查询,写文件
for (Long i = 0l; i < pageSize; i++)
{
//要导出的数据
List<Object[]> result = getDownFileData(i*10000);
for (Object[] objects : result)
{
bw.write(Integer.toString(num));
bw.write(",");
bw.write( ObjectUtils.toString(objects[0]).substring(0, 19).substring(0, 10) );
bw.write(",");
bw.write( frontUtilService.getCsvStr(InitParameter.getItemLabel("TRAN", ObjectUtils.toString(objects[1]))) );
bw.write(",");
bw.write( ObjectUtils.toString(objects[2]));
bw.write("\r\n");
num++;
}
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally
{
if (bw != null)
{
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (osw != null)
{
try {
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null)
{
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//下载文件
frontUtilService.downZipFile(fileName);
TblUsrAccount tblUsrAccount = loginUserInfo.getUserInfo();
//----记录系统操作日志
TblSysOperate tblSysOperate = new TblSysOperate();
tblSysOperate.setCreateUser(tblUsrAccount.getLoginName());
tblSysOperate.setCreateUserDisplay(tblUsrAccount.getDisplayName());
tblSysOperate.setCreateDate(new Date());
tblSysOperate.setOperateType("E004");
tblSysOperate.setItemType("C004");
//操作对象主键ID
//tblSysOperate.setItemId(new Long(tblConContact.getContactId()));
//操作描述
tblSysOperate.setRe("交易记录导出");
getEntityManager().persist(tblSysOperate);
}
页面按钮调用exportCsv()方法
public String createDownZipFolder() {
String folderPath = ServletContexts.instance().getRequest()
.getSession().getServletContext().getRealPath(File.separator)
+ "downZipFolder" + File.separator; File folder = new File(folderPath);
if (!folder.exists()) {
folder.mkdirs();
}
return folderPath;
} public void downZipFile(String fileName) {
ServletOutputStream servletOutputStream = null;
ZipOutputStream zipOutputStream = null;
BufferedInputStream bis = null;
HttpServletResponse response = null;
try {
ExternalContext externalContext = FacesContext.getCurrentInstance()
.getExternalContext();
response = (HttpServletResponse) externalContext.getResponse();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename="
+ new String("downFile".getBytes("gbk"), "iso-8859-1")
.concat(".zip")); Cookie cookie = new Cookie("downFileStatus", "0");
response.addCookie(cookie); servletOutputStream = response.getOutputStream();
CheckedOutputStream checkedOutputStream = new CheckedOutputStream(
servletOutputStream, new CRC32());
zipOutputStream = new ZipOutputStream(new BufferedOutputStream(
checkedOutputStream));
zipOutputStream.putNextEntry(new ZipEntry("downFile.csv"));
bis = new BufferedInputStream(new FileInputStream(fileName)); byte[] data = new byte[1024];
int count;
while ((count = bis.read(data, 0, 1024)) != -1) {
zipOutputStream.write(data, 0, count);
} zipOutputStream.flush();
servletOutputStream.flush();
FacesContext.getCurrentInstance().responseComplete();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipOutputStream != null) {
try {
zipOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (servletOutputStream != null) {
try {
servletOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
} new File(fileName).delete();
}
}
不知道楼主看得懂不 我这是导出csv格式的 不懂可以问
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.struts2.interceptor.ServletResponseAware; import com.dfjhg.newWeb.biz.JobCourseBiz;
import com.dfjhg.newWeb.entity.JobCourse;
import com.opensymphony.xwork2.ActionSupport;
public class outExcleAction extends ActionSupport implements ServletResponseAware {
private static final long serialVersionUID = 1L;
private JobCourseBiz jobCourseBiz;
private JobCourse jobCourse;
private int pageNo=1;
private int pageSize=5;
private Date date1;
private Date date2;
public Date getDate1() {
return date1;
} public void setDate1(Date date1) {
this.date1 = date1;
} public Date getDate2() {
return date2;
} public void setDate2(Date date2) {
this.date2 = date2;
} public void setJobCourseBiz(JobCourseBiz jobCourseBiz) {
this.jobCourseBiz = jobCourseBiz;
}
public JobCourse getJobCourse() {
return jobCourse;
}
public void setJobCourse(JobCourse jobCourse) {
this.jobCourse = jobCourse;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} private String format = "xls";
private HttpServletResponse response;
private String fileName;
public String execute(){
@SuppressWarnings("all")
List la =jobCourseBiz.listJobCourse(jobCourse, pageNo, pageSize, date1, date2);
setResponseHeader();
try {
exportExcel(response.getOutputStream());
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/** 设置响应头*/
public void setResponseHeader(){
try{
response.setContentType("application/msexcel;charset=UTF-8"); //两种方法都可以
// response.setContentType("application/octet-stream;charset=iso-8859-1");
response.setHeader("Content-Disposition", "attachment;filename="
+java.net.URLEncoder.encode(this.fileName, "UTF-8"));
//客户端不缓存
response.addHeader("Pargam", "no-cache");
response.addHeader("Cache-Control", "no-cache");
}catch(Exception ex){
ex.printStackTrace();
}
}
/**导出数据*/
private void exportExcel(OutputStream os) throws IOException{
Workbook book = new HSSFWorkbook();
Sheet sheet = book.createSheet("导出信息");
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("编号");
row.createCell(1).setCellValue("客户");
row.createCell(2).setCellValue("项目");
row.createCell(3).setCellValue("项目负责人");
row.createCell(4).setCellValue("服务周期");
row.createCell(5).setCellValue("项目有无异常");
row.createCell(6).setCellValue("备注");
row.createCell(7).setCellValue("实际金额");
row.createCell(8).setCellValue("日期");
CellStyle sty = book.createCellStyle();
List<JobCourse> list = jobCourseBiz.listJobCourse(jobCourse, pageNo, pageSize, date1, date2);
for (int i = 1; i < list.size(); i++) {
JobCourse jobCourse = list.get(i-1);
row = sheet.createRow(i);
row.createCell(0).setCellValue(jobCourse.getJc_id());
row.createCell(1).setCellValue(jobCourse.getJc_cust().getCust_name());
row.createCell(2).setCellValue(jobCourse.getJc_item());
row.createCell(3).setCellValue(jobCourse.getJc_itemPrincipal());
row.createCell(4).setCellValue(jobCourse.getJc_cust().getCust_serviceCycle());
row.createCell(5).setCellValue(jobCourse.getJc_abnormity());
row.createCell(6).setCellValue(jobCourse.getJc_other());
row.createCell(7).setCellValue(jobCourse.getJc_factMoney());
row.createCell(8).setCellValue(jobCourse.getJc_date());
}
try{
book.write(os);
}catch(Exception ex){
ex.printStackTrace();
}
}
public String getFormat() {
return format;
}
public void setFormat(String format) {
this.format = format;
this.fileName = "导出数据.xls";
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
/**记住一定有该属性的set方法*/
public void setServletResponse(HttpServletResponse response) {
this.response = response;
}
}
<%@page import="com.dfjhg.newWeb.entity.JobCourse"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>项目</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="css/style.css" rel="stylesheet" type="text/css">
<script src="script/common.js"></script>
<script src="script/Calendar.js"></script>
</head>
<body>
<div class="page_title">管理员管理>工作历程管理</div>
<div class="button_bar">
<button onclick="to('Abnormity_get')">近期不正常项目</button>
<input type="hidden" name="format" value="xls" />
<input type="button" onclick="to('OutExcle.action');" value="导入到EXCEL">
</div>
<s:form action="JobCourse_get" method="post" enctype="multipart/form-data">
<div class="button_bar">
<button class="common_button" type="submit">查询</button>
<button class="common_button" onclick="to('Customer_get')">返回</button>
</div><table class="query_form_table">
<tr>
<th>日期</th>
<td>
<input type="text" name="date1" value="" readOnly onClick="setDay(this);"/>
--
<input type="text" name="date2" value="" readOnly onClick="setDay(this);"/>
</td>
</tr>
</table>
</s:form>
<br />
<table class="data_list_table" id="tb">
<% float totalMoney=0;%>
<tr>
<th>序号</th>
<th>客户</th>
<th>项目</th>
<th>项目负责人</th>
<th>有无异常</th>
<th>备注</th>
<th>服务周期</th>
<th>实际金额</th>
<th>日期</th>
<th>操作</th>
</tr>
<tr>
<s:set var="totalMoney" value="0" />
<s:iterator id="jobCourse" value="listJc" status="status">
<tr>
<td class="list_data_number"><s:property value="#status.index+1"/></td>
<td class="list_data_text"><s:property value="jc_cust.cust_name"/></td>
<td class="list_data_text"><s:property value="jc_item"/></td>
<td class="list_data_text"><s:property value="jc_itemPrincipal"/></td>
<td class="list_data_text"><s:property value="jc_abnormity"/></td>
<td class="list_data_text"><s:property value="jc_other"/></td>
<td class="list_data_text"><s:property value="jc_cust.cust_serviceCycle"/></td>
<td class="list_data_text"><s:property value="jc_factMoney"/></td>
<s:set var="totalMoney" value="#totalMoney+jc_factMoney" />
<td class="list_data_text"><s:property value="jc_date"/></td>
<s:url id="edit" value="JobCourse_find">
<s:param name="jobCourse.jc_id" value="jc_id"></s:param>
</s:url>
<s:url id="del" value="JobCourse_delete">
<s:param name="jobCourse.jc_id" value="jc_id"></s:param>
</s:url>
<td class="list_data_op">
<s:a href="%{edit}"><img title="编辑" src="images/bt_edit.gif" class="op_button" /></s:a>
<s:a href="%{del}"><img title="删除" src="images/bt_del.gif" class="op_button" /></s:a>
</td>
</s:iterator>
</tr>
<tr>
<td class="list_data_number">
统计金额
</td>
<td align="center" colspan="9">
<s:property value="#totalMoney"/>
</td>
</tr>
<tr>
<th colspan="100" class="pager">
<s:form action="JobCourse_get" namespace="/" method="post">
<div class="pager">
共<s:property value="pageNum"/>条记录 每页<s:textfield name="pageSize" size="1"></s:textfield>条
第<s:property value="pageNo"/>页/共<s:property value="pageMax"/>页
<a href="JobCourse_get.action?pageNo=1">第一页</a>
<a href="JobCourse_get.action?pageNo=${pageNo>1?pageNo-1:1 }">上一页</a>
<a href="JobCourse_get.action?pageNo=${pageNo<pageMax?pageNo+1:pageMax }">下一页</a>
<a href="JobCourse_get.action?pageNo=${pageMax }">最后一页</a>
转到<s:textfield name="pageNo" size="1"></s:textfield>页
<button style="width: 30px;" type="submit">GO</button>
</div>
</s:form>
</th>
</tr>
</table>
</form>
</body>
</html>struts如下:
<action name="OutExcle" class="outExcleAction">
<result type="redirectAction">JobCourse_get</result>
</action>application xml 如下:
<bean id="outExcleAction" class="com.dfjhg.newWeb.admin.action.outExcleAction">
<property name="jobCourseBiz" ref="jobCourseBiz"></property>
</bean>
at java.net.URLEncoder.encode(URLEncoder.java:188)
at com.dfjhg.newWeb.admin.action.outExcleAction.setResponseHeader(outExcleAction.java:87)
at com.dfjhg.newWeb.admin.action.outExcleAction.execute(outExcleAction.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)怎么解决呢 各位大神
import java.io.OutputStream;import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class LoginAction extends BaseAction{
public String login(){
HttpServletResponse response=this.getResponse();
response.setHeader("Content-disposition","attachment;filename=test.xls");
response.setContentType("application/msexcel;charset=utf-8");
try{
OutputStream out=response.getOutputStream();
//生成execl
HSSFWorkbook wb=new HSSFWorkbook();
HSSFSheet sh=wb.createSheet();
HSSFRow row=sh.createRow(0);
HSSFCell cll=row.createCell((short)0);
cll.setCellValue(new HSSFRichTextString("姓名"));
HSSFCell cll2=row.createCell((short)1);
cll2.setCellValue(new HSSFRichTextString("年龄"));
HSSFRow row1=sh.createRow(1);
HSSFCell cll3=row1.createCell((short)1);
cll3.setCellValue(new HSSFRichTextString("李四"));
HSSFCell cll4=row1.createCell((short)2);
cll4.setCellValue(new HSSFRichTextString("30"));
wb.write(out);
out.flush();
out.close();
}catch(IOException ex){
ex.printStackTrace();
}
return null;
}
}