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,然后创建一个 servlet。您可以将 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>  

如果不想创建 servlet,我认为可以将文件路径添加到valueoutputLink。请试一试!

于 2013-10-20T20:47:35.440 回答