日期:2014-05-17  浏览次数:20784 次

怎么防止点击一次按钮触发多次下载事件?
如题:我要实现的功能是这样的,页面有个‘导出’按钮,当我点击这个按钮时会发出请求到action,然后action会根据条件查询数据,然后会生成一个excel文件并将数据写入这个excel文件中,最后把这个excel文件输出到本地,功能就是这样的。我的问题是,当使用ie浏览器时点击‘导出’action会收到多次请求(firefox没有这个问题),然后就会分多次执行上边的过程。下边是我action中的代码,请大侠们指点一下我该怎么做才能让用ie导出时也只导出一次呢,谢了

@Override
    public String execute() throws Exception {
        if ("export".equals(op)) {
            export();
        } 
        long currentUserId = getCurrentUserId();
        pageVo = smsWebService.queryUnsentMt(termId, content, begDate, endDate,
                currentUserId, userId);
        return SUCCESS;
    }
    private void export() throws Exception {
        ……//查询数据并生成excel输出到本地
    }

 
用ie时action中的execute会执行多次,怎么做能防止ie这种会发出多次请求的问题呢?

------解决方案--------------------
<s:token/>
------解决方案--------------------
引用:
如题:我要实现的功能是这样的,页面有个‘导出’按钮,当我点击这个按钮时会发出请求到action,然后action会根据条件查询数据,然后会生成一个excel文件并将数据写入这个excel文件中,最后把这个excel文件输出到本地,功能就是这样的。我的问题是,当使用ie浏览器时点击‘导出’action会收到多次请求(firefox没有这个问题),然后就会分多次执行上边的过程。下边是我action中的……

没看到你的export()代码,也没看到你页面上的代码不好说,建议你debug调试下,你执行完export()后, 
long currentUserId = getCurrentUserId();         pageVo = smsWebService.queryUnsentMt(termId, content, begDate, endDate,                 currentUserId, userId);         return SUCCESS; 这些代码还有没有执行
------解决方案--------------------
百度搜搜<s:token/>的使用,配置下就行,不需要额外的学习。
------解决方案--------------------
<!-- <interceptor-ref name="token" /> -->这个不要注销,页面上在form里面,加上<s:token/>就行了,记得引入s标签<%@ taglib uri="/struts-tags" prefix="s" %>
------解决方案--------------------
楼主眼神好凶残
------解决方案--------------------

------解决方案--------------------
点击按钮出发多次提交,在ff下没有问题,但是在IE下有问题,多数是JS脚本不兼容导致的。能够看下jsp和js文件
------解决方案--------------------
你用firebug看下把,看看你点击的时候发了几次请求,IE上面也找个工具看下,应该是Js的问题。点击的时候出发了两次事件
------解决方案--------------------
在点第一次导出的时候把按钮置灰,导出后在启用按钮。