现在有个需求是这样的...在JSP页面有一个button...
点击之后会location.href到一个servlet
这个servlet会到数据库抽一批数据并生成EXCEL..然后通过ServletOutputStream返回到页面给用户下载这个文件..
因为在抽取数据这个过程需要消耗一定的时间(10秒以上,数据很多)
现在在这个button的onclick方法里面要加个判断..当servlet的文件没返回时要将这个按钮disabled...否则用户觉得没反应狂点的话服务器就被搞崩了.........然后文件返回并下载完成后(其实文件返回了就行,下载完成不完成无所谓)..要将这个按钮激活可以继续点....这个要怎么弄呢?
点击之后会location.href到一个servlet
这个servlet会到数据库抽一批数据并生成EXCEL..然后通过ServletOutputStream返回到页面给用户下载这个文件..
因为在抽取数据这个过程需要消耗一定的时间(10秒以上,数据很多)
现在在这个button的onclick方法里面要加个判断..当servlet的文件没返回时要将这个按钮disabled...否则用户觉得没反应狂点的话服务器就被搞崩了.........然后文件返回并下载完成后(其实文件返回了就行,下载完成不完成无所谓)..要将这个按钮激活可以继续点....这个要怎么弄呢?
在 返回数据后 $(this).removerAttr('disabled'); 或 js时 this.disabled=true; 但是 建议你不这么做,最好 做一个遮罩层 进行处理, 在加载完数据后在撤销遮罩层, jquery 有这个插件,BlockUi 你可以参考下
还有..现在已经是onclick的时候将按钮disabled了...但是没法自动恢复..因为我不知道这个文件是否已经生成并传到浏览器了...
PS:我生成文件是用的一个单独的servlet..就是在onclick里有一个
location.href="<%=request.getContextPath()%>/export?id=xxx";这个servlet里的doGet里就是
ServletOutputStream aOutputStream = response.getOutputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
baos.writeTo(aOutputStream);
aOutputStream.flush();
aOutputStream.close();不是通过ajax方式取得数据的....文件也是在服务器端就生成好了的...
ajax没有头绪..我试过..貌似没法将二进制数据文件直接传到浏览器..浏览器没弹出下载框这东东...
应该不是原来的页面了..相当于跳转到另外一个页面了...但是这个页面的header是
response.setContentType("application/ms-excel");
response.addHeader("Content-Disposition", "attachment; filename=" + GridTurnpage.encode("OCNCommunity", "utf-8") + ".xls");
所以这个页面不是打开一个新的页面..而是弹出下载框...你说的ajax那个有资料么?我找了一下..貌似都是通过打开一个新的页面提交到servlet做的...包括工程里的其他实现案例也是这么做的...
遮罩层这个其实也有..但是都跳转到另外一个页面了..所以这个遮罩有没有都没区别..
我的js是这么写的function exportCommFunc(){
var rowset = getTable();
var allcount = rowset.getTotalRowCount();
if(allcount > 10000){
alert("导出的数据超过最大限制(10000),请缩小导出范围!");
return;
}
if(allcount < 1 ){
alert("没有需要导出的数据!");
return;
}
var areaId = getForm().getValue("areaId");
if (areaId==null || areaId==""){
alert("请选择行政区域!");
return;
}
var communityName = getForm().getValue("cname");
var regionalLocName = getForm().getValue("rl");
var url = "<%=request.getContextPath()%>"
+ "/business/export?"
+ "areaid=" + areaId
+ "&communityname=" + communityName
+ "®des=" + regionalLocName;
g_AIButtonManager.get("expCommBtn").setText("请稍候...重新导出请重新查询地址");
document.all("expCommBtn").disabled = true;
location.href = url;
}