Flying Saucer在生成的PDF中打印EL表达式而不是实际值

时间:2013-01-31 22:41:27

标签: java jsf flying-saucer

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

pdf.xhtml本身很好用。

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

我的代码出了什么问题?

提前感谢。

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

xhtml页面,它是生成pdf的基础: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();

1 个答案:

答案 0 :(得分:0)

如果请求网址与FacesServlet的网址格式不匹配,就会发生这种情况。它是负责执行所有JSF / EL工作的人。因此,如果您已将Faces Servlet映射到例如*.jsf的网址格式,那么您应该指向pdf.jsf,而不是pdf.xhtml


对具体问题

无关jsessionid路径片段必须全部小写。