2012-12-24 84 views
0

我使用這個primefaces媒體標籤來查看PDFJSF:頁面加載後自動觸發事件

<p:media value="#{bean.path}" width="100%" height="600px">  
</p:media> 


現在(ViewPDF.xhtml)此頁面的特定文件夾中加載PDF文件後,我想刪除PDF文件。我搜索並試圖<f:event>標籤爲此,並使用它的type="postAddToView",但它刪除之前顯示PDF瀏覽器中的文件,我希望它應該刪除後,瀏覽器中加載PDF文件。我應該用什麼這個?
任何幫助將不勝感激

回答

0

PDF文件未完成下載「後裝載」。它由完全獨立的HTTP請求下載,該請求在頁面加載後啓動。您可能會在所需的URL模式上映射過濾器,並在chain.doFilter()調用後執行作業。但這有點奇怪。

我知道您正在生成只在提交時纔會顯示的PDF報告。在這種情況下,您應該創建一個單獨的servlet,它基於某些請求參數生成PDF,並將其直接寫入響應輸出流而不是文件輸出流。最後,讓JSF使用正確的請求參數爲該servlet生成正確的URL。

E.g.

public void submit() { 
    // ... 

    path = externalContext.getRequestContextPath() + "/pdf" 
     + "?foo=" + URLEncoder.encode(foo, "UTF-8") 
     + "?bar=" + URLEncoder.encode(bar, "UTF-8") 
     + "?baz=" + URLEncoder.encode(baz, "UTF-8"); 
} 

和這樣一個servlet(假定你正在利用iText生成PDF):

@WebServlet("/pdf/*") 
public class PdfServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String foo = request.getParameter("foo"); 
     String bar = request.getParameter("bar"); 
     String baz = request.getParameter("baz"); 
     // ... 

     response.setContentType("application/pdf"); 
     PdfWriter.getInstance(document, response.getOutputStream()); 
     // ... 
    } 

} 

如果你想隱藏的請求參數的時候,你可以備選地也存儲它們在會話中通過自動生成的/唯一的ID並將其作爲請求參數傳遞。

相關問題