使用带有ajax = false的Primefaces按钮下载文件

时间:2016-02-18 17:35:59

标签: jsf-2 primefaces itext

好的,所以当我尝试在jsf上创建一个pdf时遇到以下问题,如果我添加ajax = false它会生成一个pdf,但是当我采用ajax =时,我无法从表单中访问我的数据来自我的butto我可以从我的表单访问数据,但我的pdf没有生成。

这是我的功能

public void createPDF() {
        try {
            System.out.println("create pdf " + fichaPlinianDM.getFichaPlinian().getTaxon().getNombreCientificoTaxon());
            String nombre = "name"; // fichaPlinianDM.getFichaPlinian().getTaxon().getNombreCientificoTaxon();
            System.out.println("create pdf " + nombre);

            ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
            ec.setResponseHeader("Content-Type", "application/pdf");
            ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + nombre + ".pdf\"");

            Document document = new Document();
            PdfWriter writer = PdfWriter.getInstance(document, ec.getResponseOutputStream());
            document.open();
            buildPDFContent(document);
            document.close();
            FacesContext.getCurrentInstance().responseComplete();
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

如果我尝试访问fichaPlinianDM.getFichaPlinian()

,我会得到一个空指针异常

fichaPlinianDM是一个托管属性

@ManagedProperty(value = "#{fichaPlinianDM}")
    private FichaPlinianDM fichaPlinianDM;

buildPDFContent是一个生成pdf主体的函数。这些是我测试的“按钮”。

<p:commandLink actionListener="#{fichaPlinianBusquedaController.test}"
        ajax="false">
        <p:graphicImage library="images" name="pdf.png" />
    </p:commandLink>

    <p:commandButton value="Exportar PDF"
        process="@this,:fichaPlinianAdminForm:fichaPlinianFormularioEntero"
        actionListener="#{fichaPlinianBusquedaController.createPDF()}"
         />

0 个答案:

没有答案