2016-11-17 83 views
0

点击下载后,我的代码开始在新打开的选项卡窗口中从SAN位置写入内容,完成后,将PDF下载到本地系统。如果文件在30秒内没有写入/下载到最前面,我想关闭新的标签页窗口。然后在父窗口JSP上显示一条文本消息。我的servlet代码如下:如果下载失败,在30秒后关闭BufferedOutputStream输出

try 
    { 
     GetPDAO getPDAO= new GetPDAO(); 

      for(int i=0;i<5;i++) 
      { 
       content=getPDAO.getPFromE(strPN); 
       DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss"); 
       Date dateobj = new Date(); 
       if(content==null) 
       { 
       Thread.sleep(5000); 
       } 
      else { 

       content=getPDAO.getPFromE(strPN); 
       break; 
      } 
      } 
     response.setContentType("application/pdf"); 
     String strFileName=strPN+".pdf"; 
     response.setHeader("Content-Disposition","attachment; filename=\"" + strFileName + "\""); 
     response.setHeader("Cache-Control","no-cache"); 
     response.setHeader("Cache-Control","no-store"); 
     response.setHeader("Pragma","no-cache"); 
     response.setDateHeader("Expires", 0); 
     output =new BufferedOutputStream(response.getOutputStream()); 
     output.write(content); 
     output.flush();   
     } 
    finally 
    { 
     output.close(); 
     } 

和下面我JSP代码:

function onSubmit() 
{  
var url="<%=strCCPURL%>"+"/getpfromeservlet?PN="+document.getElementById("pn").value; 
     document.getElementById('alrt').innerHTML='<b>Please wait</b>'; 
      setTimeout(function() {document.getElementById('alrt').innerHTML='';},8000); 
      window.open(url,"_blank"); 
      document.getElementById('viewPD').href=url; 
      document.getElementById('viewPD').target='_blank';    
} 
+0

问题是?注意如果您想要30秒的超时时间,您为什么要设置8秒的超时时间? – EJP

+1

一些滥用在这里downvote。如果你看到,8秒是针对不同的“请稍候”警告,然后隐藏(setTimeOut).Q是新的打开的标签在30秒后如何自动关闭 –

+0

@EJP有人可以帮忙。我完全陷入困境。我的Q在contentType为(application/pdf)的servlet中,我可以写任何东西,以便我可以使用window.close关闭新打开的窗口,并将我的注意力转移回JSP。我想要做的就是在30秒后显示一条消息,表明我的下载失败。 –

回答

2

您可以使用的sendRedirect从你的servlet到JSP的副本,然后自动关闭JSP。 sendRedirect将关闭servlet,然后复制JSP将通过window.close方法关闭。焦点回到你的主要JSP。