如题:我要实现的功能是这样的,页面有个‘导出’按钮,当我点击这个按钮时会发出请求到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这种会发出多次请求的问题呢?

解决方案 »

  1.   

    没看到你的export()代码,也没看到你页面上的代码不好说,建议你debug调试下,你执行完export()后, 
    long currentUserId = getCurrentUserId();         pageVo = smsWebService.queryUnsentMt(termId, content, begDate, endDate,                 currentUserId, userId);         return SUCCESS; 这些代码还有没有执行
      

  2.   

    百度搜搜<s:token/>的使用,配置下就行,不需要额外的学习。
      

  3.   

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <constant name="struts.convention.default.parent.package"
    value="default" />
    <constant name="struts.convention.package.locators.basePackage"
    value="com.mdao.emap.marykay.web.struts" />
    <constant name="struts.objectFactory"
    value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
    <constant name="struts.objectFactory.spring.autoWire" value="type" />
    <constant name="struts.multipart.maxSize" value="1073741824" />
    <constant name="struts.ui.theme" value="simple" />
    <constant name="struts.locale" value="zh_CN" />
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <constant name="struts.ognl.allowStaticMethodAccess" value="true" />
    <package name="default" extends="convention-default">
    <interceptors>
    <interceptor-stack name="emapWebStack">
    <!-- <interceptor-ref name="token" /> -->
    <interceptor-ref name="paramsPrepareParamsStack" />
    <interceptor-ref name="fileUpload" />
    </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="emapWebStack" />
    <default-action-ref name="default" />
    <global-results>
    <result name="forbid">/WEB-INF/content/manage/forbid.jsp</result>
    <result name="globalError">/WEB-INF/content/manage/error.jsp</result>
    <result name="notgrant">/WEB-INF/content/manage/notgrant.jsp</result>
    </global-results>
    </package>
    </struts>
    这是我们struts配置文件,不知道token怎么配了
      

  4.   

    <!-- <interceptor-ref name="token" /> -->这个不要注销,页面上在form里面,加上<s:token/>就行了,记得引入s标签<%@ taglib uri="/struts-tags" prefix="s" %>
      

  5.   

    哎,纠结啊还是不行,action还是能收到多次请求
      

  6.   

    点击按钮出发多次提交,在ff下没有问题,但是在IE下有问题,多数是JS脚本不兼容导致的。能够看下jsp和js文件
      

  7.   

    <form id="frmQuery" action="view-unsent-sms-mt.action" method="GET"> 
            <s:hidden name="op" value="" />
    ……
    </form>
    <div class="function">
            <a href="javascript:;" class="btn btn-search" id="btnQuery">查询</a>
            <a href="javascript:;" class="btn btn-search" id="btnExport">导出</a>    </div>$("#btnExport").click(function(event) {
                    $("#op").val("export");
                    $("#pageNo").val(1);
                    $("#frmQuery").submit();
                    $("#op").val("");
                });
      

  8.   

    你用firebug看下把,看看你点击的时候发了几次请求,IE上面也找个工具看下,应该是Js的问题。点击的时候出发了两次事件
      

  9.   

    一次,都是一次,我测了一下,发现ie和firefox都是正常的,只输出一次文件,360和搜狗是输出多次文件
      

  10.   

    哎,问题解决了,生成导出文件和导出文件在同一个action中做,360多线程下载就会多次请求这个action,我换了个方法,生成导出文件在之前的actin中,然后重定向到另外一个action中专门导出文件
    谢了哈