【问题标题】:JSF 2.0 Get content of xhtml page within current sessionJSF 2.0 在当前会话中获取 xhtml 页面的内容
【发布时间】:2011-11-07 01:12:26
【问题描述】:

我正在尝试使用飞碟将 JSF 页面转换为 PDF。

@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 页面内容(带有所有参数值)?

【问题讨论】:

  • 请注意,语法高亮提示您的 Content-Disposition 标头值中的引号已损坏。

标签: session jsf pdf flying-saucer


【解决方案1】:

通过ExternalContext#getSession() 获取HttpSession 并将其ID 添加为jsessionid URL 路径片段。

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

请注意,查询字符串(如果有的话)应该在后面而不是之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2012-03-31
    • 2014-11-22
    • 2016-03-01
    • 2012-09-04
    • 2013-12-22
    • 2012-10-05
    相关资源
    最近更新 更多