Primefaces dataExporter和嵌套的dataTable

时间:2013-03-28 13:11:50

标签: jsf primefaces datatable data-export

我在另一个dataTable内使用dataTable。 当我尝试使用dataExporter导出(以任何格式)时,我得到了类似:“org.primefaces.component.datatable.DataTable@1b675ca”而不是内部dataTable值。

dataExporter的限制吗?我必须实现扩展dataExporter的此功能吗? 任何替代品?

2 个答案:

答案 0 :(得分:1)

这是dataExporter的限制,你必须让自己的出口商这样做。我认为最好尝试从exportValue类(它是所有自定义导出类的超类)重写方法Export。在这里,如果值不是HtmlCommandLinkValueHolder的实例,则只使用toString(),这就是为什么您会看到这是打印的原因。此外,您必须创建动作侦听器,它将实例化您的自定义类以进行导出。

答案 1 :(得分:1)

由于我的外DataTable只有一列,每行都是一个子DataTable,我以这种方式扩展了PDFExporter:

@Override
    protected String exportValue(FacesContext context, UIComponent component) {
        if (component instanceof DataTable) {
            DataTable tab = (DataTable) component;
            try {
                document.add(exportPDFTable(context, tab, false, false, "UTF-8"));
            } catch (DocumentException ex) {
                Logger.getLogger(ExtendedPDFExporter.class.getName()).log(Level.SEVERE, null, ex);
            }
             return "";       
        else {
            return super.exportValue(context, component);
        }
    }

其中documentexport方法创建。

现在的问题是每个子DataTable都使用动态列,对于导出的PDF中的那些列,我得到了每个子DataTable中复制的第一个子DataTable的值。 有什么想法吗?