好的,所以当我尝试在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()}"
/>