struts2导出excel,根据时间不同,action方法执行两次
现在根据选择开始时间和结束时间来查询一些记录,并将其导出excel,现在时间选的不同,action的方易做图执行两次,第二次 时间为null,就将所有的都查出来了 --------------------编程问答-------------------- 应该是你提交了两次请求,也许你在js中做了请求的提交而jsp页面控件本身也提交请求了,image button,submit等控件都可以提交请求的,请再查查 --------------------编程问答-------------------- 调试一下,应该请求两次祝楼主好运 --------------------编程问答-------------------- action执行两次,可以肯定的是一定提交了两次请求!!! --------------------编程问答--------------------
+1 看看js --------------------编程问答-------------------- 自己的程序逻辑问题。看看页面有没有重复提交 --------------------编程问答-------------------- 页面的代码是这样的,直接用form提交的
--------------------编程问答-------------------- Action方法
<s:form action="exportxls" method="post" namespace="/signup" >
<fieldset class="Normal FloatLeft" style="width: 99%;">
<legend>导出</legend>
<dl style="line-height:17pt;">
<dt> </dt>
<dt>起始日期</dt>
<dd>
<input id="beginDate" name="beginDate" value="" />
<img style="cursor:hand" id="img_calendar" src="../skin/images/calendar.gif" class="calendar" target="beginDate" showtime="2" />
</dd>
<dt>终止日期</dt>
<dd>
<input id="endDate" name="endDate" value="" />
<img style="cursor:hand" id="img_calendar" src="../skin/images/calendar.gif" class="calendar" target="endDate" showtime="2" />
</dd>
</dl>
<dl>
<dt></dt>
<dd>
<input type="submit" class="tijiaoButton" value="导出"/>
</dd>
</dl>
</fieldset>
</s:form>
public String exportxls()
{
HttpServletRequest request = getRequest();
String beginDate = request.getParameter("beginDate");
String endDate = request.getParameter("endDate");
List<RscoFault> faults=getHibernateUtil().getRscoFaultByResolvDate(beginDate,endDate);
ByteArrayOutputStream out = new ByteArrayOutputStream();
try
{
// os=new FileOutputStream(fault);
//第一步,创建一个webbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
//第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet("表一");
//第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int)0);
//第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); //创建一个居中格式
HSSFCell cell = row.createCell((short)0);
cell.setCellValue("名称"); cell.setCellStyle(style);
cell = row.createCell((short)1);
cell.setCellValue("编号"); cell.setCellStyle(style);
。。。。。
}
wb.write(out);
out.flush();
setFileName("fault"+beginDate+"--"+endDate);
byte[] content = out.toByteArray();
this.excelStream=new ByteArrayInputStream(content);
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
if(out!=null)
try
{
out.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return SUCCESS;
}
struts.xml
<action name="exportxls" class="com.rdo.wodflww.action.SignUpAction"
method="exportxls">
<result name="success" type="stream">
<param name="contentType">application/vnd.ms-excel</param>
<param name="inputName">excelStream</param>
<param name="contentDisposition">attachment;filename="${fileName}.xls"</param>
<param name="bufferSize">1024</param>
</result>
</action>
第一次action执行弹出
文件下载
获取文件信息
exporxls.do(来自localhost)
的窗口。
第二次action执行弹出
另存为的窗口。
就可以保存了
怎么不弹出出一个窗口,显示打开和保存按钮的呢?
--------------------编程问答-------------------- <param name="bufferSize">1024</param>
删了试试。 --------------------编程问答-------------------- 爱莫能助 --------------------编程问答-------------------- 不要用form指定提交,自己写提交方法,在提交完成后,重置 this.form.action = ""; --------------------编程问答-------------------- 大家好,你这个问题我最近也碰到了,当时我用的是360浏览器进行的测试(有参数 产品名),点击导出excel后,对应的action也是执行2次,第一次获取的产品名正确,第二次获取的产品名为null,我花了近2天得时间没搞明白,接着我用IE浏览器进行测试,发现了令人兴奋的结果:action执行一次且导出的结果正确,需要说明的是火狐浏览器测试的结果也正确。
--------------------编程问答-------------------- 我发言于11楼的方法不知道对你的问题是否有帮助,需要指明的是测试的时候我们尽量先用IE浏览器进行测试,希望对大家有所帮助。 --------------------编程问答-------------------- 接发言于12楼,我在网上查了点资料:
对于使用360浏览器进行测试时:
360有个下载管理工具来识别这个请求的文件名之类的信息.然后需要点击确定后(此后会再次请求一次刚才的地址),才会具体把这个输出的东西保存为具体文件.
这里请求了两次那个文件.
你可以试试把360的下载修改为默认ie下载.看看还有没有问题.
--------------------编程问答-------------------- 我最近也是遇到这个问题,用360测试就会发两次请求,用IE就正常发一次请求,不知道具体是什么原因,能不能从程序里面控制这个问题? --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 夏天的时候我也遇见了这个问题,但这不是struts的问题。是你请求了两次或者是调用了两次,一个null和一个有的话多半是前台哪个熊孩子直接copy的别个的源码没改
补充:Java , Java EE