0

Flying Saucer を使用して xhtml ページから PDF を生成しようとしています。私の関連コードは以下のとおりです。

pdf.xhtml 自体は正常に動作します。

ただし、CreatePDF バッキング Bean メソッドを使用して PDF を作成しようとすると、バッキング Bean の sirketadi プロパティの入力値ではなく、生成された PDF に EL 式 #{basvuruBean.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

これは、リクエストURLがのURLパターンと一致しなかった場合に発生する可能性がありますFacesServlet。これは、すべてのJSF/EL作業を実行する責任があります。したがって、たとえばのURLパターンにFacesサーブレットをマッピングした場合は、*.jsfを指す必要があります。を指す必要がpdf.jsfありpdf.xhtmlます。


具体的な問題とは関係なく、jsessionidパスフラグメントはすべて小文字である必要があります。

于 2013-02-01T01:11:46.620 に答える