0

我正在尝试使用飞碟从 xhtml 页面生成 PDF。我的相关代码如下。

pdf.xhtml 本身工作正常。

但是,如果我尝试使用 CreatePDF 支持 bean 方法创建 pdf,生成的 pdf 包含 EL 表达式 #{basvuruBean.sirketAdi} 而不是支持 bean 的 sirketadi 属性的输入值。支持 bean 是会话范围的。

我的代码有什么问题?

提前感谢您。

另一个使用支持 bean 从 jsf 页面生成 pdf 的库推荐?

作为生成 pdf 基础的 xhtml 页面:pdf.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>
</h:head>
        <body>Sirket Adı: #{basvuruBean.sirketAdi}
</body>
</html>

在 basvuruBean 支持 bean 中创建 PDF 方法

public void createPDF() {


            FacesContext facesContext = FacesContext.getCurrentInstance();
            ExternalContext externalContext = facesContext.getExternalContext();
            String servername = externalContext.getRequestServerName();
            String port = String.valueOf(externalContext.getRequestServerPort());
            String appname = externalContext.getRequestContextPath();
            String protocol = externalContext.getRequestScheme();
            HttpSession session = (HttpSession) externalContext.getSession(true);
            this.url = protocol + "://" + servername + ":" + port + appname + "/"+PDF_PAGE+";JSESSIONID=" + session.getId();
            try {
                ITextRenderer renderer = new ITextRenderer();
                renderer.setDocument(new URL(this.url).toString());
                renderer.layout();
                HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
                response.reset();
                response.setContentType("application/pdf");
                response.setHeader("Content-Disposition", "inline; filename=\"" + PDF_FILE_NAME + "\"");
                OutputStream browserStream = response.getOutputStream();
                renderer.createPDF(browserStream);

            } catch (Exception ex) {
                Logger.getLogger(BasvuruBean.class.getName()).log(Level.SEVERE, null, ex);
            }
            facesContext.responseComplete();
4

1 回答 1

0

That can happen if the request URL did not match the URL pattern of the FacesServlet. It's the one responsible for performing all the JSF/EL works. So, if you've mapped the Faces Servlet on an URL pattern of for example *.jsf, then you should point to pdf.jsf, not pdf.xhtml.


Unrelated to the concrete problem, the jsessionid path fragment must be in all lowercase.

于 2013-02-01T01:11:46.620 回答