2011-08-30 79 views
2

我試圖用飛碟將JSF頁面轉換爲PDF。JSF 2.0在當前會話中獲取xhtml頁面的內容

@ManagedBean 
@SessionScoped 
public class ReportController { 
    ... 
    public void createPDF() { 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     ExternalContext externalContext = facesContext.getExternalContext(); 
     try { 
     ITextRenderer renderer = new ITextRenderer(); 
     renderer.setDocument(new URL("http://myserver.com/report.xhtml").toString()); 
     renderer.layout(); 
     HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 
     response.reset(); 
     response.setContentType("application/pdf"); 
     response.setHeader("Content-Disposition", "inline; filename="report.pdf"); 
     OutputStream browserStream = response.getOutputStream(); 
     renderer.createPDF(browserStream); 
     } catch (Exception ex) { 
      ... 
     } 
     facesContext.responseComplete(); 
    } 
} 

在/report.xhtml頁,我有一些後臺bean的參數,它的值應該出現在PDF中。但他們沒有。如果我訪問xhtml頁面,則顯示值正確。 我認爲這是因爲renderer.setDocument(String uri)爲指定url中的加載文檔創建新連接(和新會話)。我如何在當前會話中獲取xhtml頁面內容(使用所有參數值)?

+0

請注意,語法突出顯示提示您Content-Disposition標頭值中的引號已損壞。 – BalusC

回答

2

通過ExternalContext#getSession()獲取HttpSession並將其ID添加爲jsessionid URL路徑片段。

HttpSession session = (HttpSession) externalContext.getSession(true); 
String url = "http://myserver.com/report.xhtml;jsessionid=" + session.getId(); 
// ... 

請注意查詢字符串,如果有的話,應該以後去那裏和以前沒有的。

+0

是的,它的工作原理非常感謝! – padevong