我正在尝试使用飞碟从 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();