0

現在、レポート プロジェクトで jsf2、primefaces 4、および omnifaces を使用しています。

私は次のようにjsfフォームを持っています:

    <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:p="http://primefaces.org/ui"
            xmlns:pe="http://primefaces.org/ui/extensions"
            xmlns:ui="http://java.sun.com/jsf/facelets"
            xmlns:f="http://java.sun.com/jsf/core" >
    <ui:composition template="/templates/reportLayout.xhtml">
         <ui:define name="centerContent">

        <h:form>
        Parameter 1: <p:inputText />
        Parameter 2: <p:inputText />

        Output Type: 
            <p:selectOneMenu>
                <f:selectItem itemValue="html" />
                <f:selectItem itemValue="pdf" />
            </p:selectOneMenu>
        <hr/>
        <p:commandButton value="Generate Report" 
            action="#{reportBean.generate}" />
        </h:form>

        <p:outputPanel id="output">
                <p:lightBox iframe="true">

                </p:lightBox>
        </p:outputPanel>
         </ui:define>
    </ui:composition>
    </html>

パラメータに基づいて、reportBean.generate メソッドは、次のように reportBean から pdf 応答または html 応答を生成します。

> res27: String = application/pdf

> res28: Array[Byte] = Array(37, 80, 68, 70, 45, 49, 46, 54, 13, 10, 57, 32, 48, 3
  2, 111, 98, 106, 13, 10, 60, 60, 47, 84, 121, 112, 101, 47, 88, 79, 98, 106, 1
  01, 99, 116, 47, 83, 117, 98, 116, 121, 112, 101, 47, 70, 111, 114, 109, 47, 7
  , 119, 51, -30,...

出力パネルに応答を表示するにはどうすればよいですか?

4

1 に答える 1

0

コードによると、最初にバイト配列ストリームを PDF に変換し、次に 1 つのサーブレットを作成する必要があります。pdf を応答に設定できます。

response.setHeader("Content-Disposition", "inline;filename=file.pdf");

またはこのコード:

response.setHeader("Content-Disposition", "attachment;filename=file.pdf");

そしてそれを呼び出しますp:lightBox

<p:lightBox iframe="true" width="80%" height="80%" >

    <h:outputLink value="#{facesContext.externalContext.requestContextPath}/YourServlet" title="Here is Pdf"> 
        <h:graphicImage library="common\images" name="pdf.png" />
    </h:outputLink> 
 </p:lightBox>  

サーブレットを作成したくない場合はvalue、outputLink のファイル パスを追加できると思います。ぜひお試しください!

于 2013-10-20T20:47:35.440 に答える