2012-12-24 47 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并将其作为请求参数传递。

相关问题