当前位置:编程学习 > JAVA >>

struts2导出excel,根据时间不同,action方法执行两次

现在根据选择开始时间和结束时间来查询一些记录,并将其导出excel,现在时间选的不同,action的方法会执行两次,第二次 时间为null,就将所有的都查出来了 --------------------编程问答-------------------- 应该是你提交了两次请求,也许你在js中做了请求的提交而jsp页面控件本身也提交请求了,image button,submit等控件都可以提交请求的,请再查查 --------------------编程问答-------------------- 调试一下,应该请求两次

祝楼主好运 --------------------编程问答-------------------- action执行两次,可以肯定的是一定提交了两次请求!!! --------------------编程问答--------------------
引用 3 楼 chiyuxing 的回复:
action执行两次,可以肯定的是一定提交了两次请求!!!


+1 看看js --------------------编程问答-------------------- 自己的程序逻辑问题。看看页面有没有重复提交 --------------------编程问答-------------------- 页面的代码是这样的,直接用form提交的

   <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>
--------------------编程问答-------------------- Action方法

 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下载.看看还有没有问题.

--------------------编程问答--------------------
引用 11 楼 hanlin10728 的回复:
大家好,你这个问题我最近也碰到了,当时我用的是360浏览器进行的测试(有参数 产品名),点击导出excel后,对应的action也是执行2次,第一次获取的产品名正确,第二次获取的产品名为null,我花了近2天得时间没搞明白,接着我用IE浏览器进行测试,发现了令人兴奋的结果:action执行一次且导出的结果正确,需要说明的是火狐浏览器测试的结果也正确。
我最近也是遇到这个问题,用360测试就会发两次请求,用IE就正常发一次请求,不知道具体是什么原因,能不能从程序里面控制这个问题? --------------------编程问答-------------------- 除 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 夏天的时候我也遇见了这个问题,但这不是struts的问题。是你请求了两次或者是调用了两次,一个null和一个有的话多半是前台哪个熊孩子直接copy的别个的源码没改
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,