2016-11-17 130 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。