【问题标题】:JSF:Automatic trigger event after page loadJSF:页面加载后自动触发事件
【发布时间】:2012-12-24 08:43:20
【问题描述】:

我正在使用这个 primefaces 媒体标签来查看 PDF

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


现在从该页面的特定文件夹中加载 PDF 文件(ViewPDF.xhtml) 我想从文件夹中删除该 PDF 文件。我为此搜索并尝试了 &lt;f:event&gt; 标签并使用了它的 type="postAddToView" 但是它会在浏览器中显示 PDf 之前删除文件,我希望在浏览器中加载 PDF 文件后将其删除。我应该为此使用什么?
任何帮助将不胜感激

【问题讨论】:

    标签: jsf jakarta-ee jsf-2 primefaces


    【解决方案1】:

    “页面加载后”PDF 文件未完成下载。它是由一个完全独立的 HTTP 请求下载的,该请求在页面加载后开始。您可以在所需的 URL 模式上映射一个过滤器,并在 chain.doFilter() 调用后执行该工作。但这有点奇怪。

    我了解到您正在生成 PDF 报告,该报告应仅在提交时显示。在这种情况下,您应该创建一个单独的 servlet,它根据一些请求参数生成 PDF,并将其直接写入响应输出流而不是文件输出流。最后,让 JSF 为该 servlet 生成正确的 URL,并使用正确的请求参数。

    例如

    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 将它们存储在会话中,并将其作为请求参数传递。

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多