p:dataExporter无法识别p:cellEditor

11 datatable jsf data-export primefaces

我有一个可编辑<p:dataTable><p:cellEditor>,我想使用该表格的内容导出为PDF格式<p:dataExporter>.

我已经包含了itext 2.1.7 jar.我得到了PDF输出,但它显示了Object#toString()所有<p:cellEditor>组件的值,如下所示:

org.primefaces.component.celleditor.CellEditor@1bd59e1
Run Code Online (Sandbox Code Playgroud)

如何导出输出值<p:cellEditor>

Bal*_*usC 12

<p:cellEditor>确实不是由PrimeFaces标准数据出口商的认可.我之前已经向PF人员报告了这个问题4013,其中不仅提到了一个例子CellEditor,而且HtmlGraphicImage(我们使用图像显示布尔状态,alt我们希望在PDF/XML/XLS/CSV报告中显示) .

首先,创建一个扩展标准的新类,PDFExporter如下所示:

public class ExtendedPDFExporter extends PDFExporter {

    @Override
    protected String exportValue(FacesContext context, UIComponent component) {
        if (component instanceof CellEditor) {
            return exportValue(context, ((CellEditor) component).getFacet("output"));
        }
        else if (component instanceof HtmlGraphicImage) {
            return (String) component.getAttributes().get("alt");
        }
        else {
            return super.exportValue(context, component);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,要使用它,请以编程方式而不是通过它来调用它<p:dataExporter>.

<p:dataTable binding="#{table}" editable="true" ...>
    <p:column><p:cellEditor>...</p:cellEditor></p:column>
    <p:column><p:cellEditor>...</p:cellEditor></p:column>
    <p:column><p:cellEditor>...</p:cellEditor></p:column>
    <p:column exportable="false"><p:rowEditor /></p:column>
</p:dataTable>
<h:commandLink value="PDF" action="#{bean.exportPDF(table, 'filename')}" />
Run Code Online (Sandbox Code Playgroud)

public void exportPDF(DataTable table, String filename) throws IOException {
    FacesContext context = FacesContext.getCurrentInstance();
    Exporter exporter = new ExtendedPDFExporter();
    exporter.export(context, table, filename, false, false, "UTF-8", null, null);
    context.responseComplete();
}
Run Code Online (Sandbox Code Playgroud)

请随意找到数据表,UIComponent#findComponent()并仅在操作方法中设置文件名.上面的代码只是示例.

  • 你是我的#1 JSF参考!你真棒! (9认同)