扩展CSVExporter会引发NPE

时间:2013-06-18 12:04:44

标签: jsf jsf-2 primefaces datatable data-export

我使用Primefaces 4-SNAPSHOT并且我有一些<h:graphicImage>的DataTables,我想将它们导出到不同的文档中。

p:dataExporter does not recognize p:cellEditor

中描述的修复程序 由BalusC提供的

适用于ExcelExporter,但在CSVExporter中的工作方式不同。

当我尝试创建文档时,我得到了NPE。

我试图从Extend-Class中删除第一行代码,因为我没有CellEditor-Elements。这种作品。它没有NPE总线,这给了我一个带有graphicImage的toString()和alt值的文档。

扩展级是这样的:

public class ExtendedCSVExporter extends CSVExporter 
{

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

我称之为引用主题中描述的

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

表格的列如下所示:

<p:column sortBy="state">
    <f:facet name="header">
        <h:outputText value="State">
    </f:facet>
    <h:graphicImage id="stateImg" name="state.png" library="icons" value="#{bean.state} />
    <p:tooltip for="stateImg" value="Allowed" showEffect="fade" hideEffect="fade" />
</p:column>

对于Excel导出,此工作正常,并且为图像获取的值是工具提示的值,因为图形图像没有alt值。 但这对CSV文件不起作用

我在pageOnly的文档中得到的是:     “javax.faces.component.html.HtmlGraphicImage@23e645d8AltText”

对于整个表格,我得到一份NPE

有任何建议如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

好的,我知道找到了解决问题的方法。

我只是覆盖了HtmlGraphicImage 我修改了Extended-Class,因此GraphicImage总是返回一个空字符串,然后我获取工具提示的值。

所以Extende-Class看起来像这样:

public class ExtendedCSVExporter extends CSVExporter 
{

@Override
protected String exportValue(FacesContext context, UIComponent component)
{
    if (component instanceof HtmlGraphicImage) 
    {
        return "";
    }
    else 
    {
        return super.exportValue(context, component);
    }
}

}