0

私は Primefaces 4-SNAPSHOT を使用しており<h:graphicImage>、別のドキュメントにエクスポートしたい DataTables がいくつかあります。

p:dataExporterに記載されている修正プログラムはp:cellEditor を認識しません

これは BalusC によって提供され、ExcelExporter では正常に機能しますが、CSVExporter では同じようには機能しません。

ドキュメントを作成しようとすると NPE が発生します。

CellEditor-Elements がないため、Extend-Class からコードの最初の行を削除しようとしました。この種の作品。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 エクスポートの場合、これは正常に機能し、グラフィック イメージには代替値がないため、イメージに使用される値はツールチップの値になります。ただし、これはCSVファイルでは機能しません

pageOnly のドキュメントで得られるのは、「javax.faces.component.html.HtmlGraphicImage@23e645d8AltText」です。

テーブル全体でNPEを取得します

これを修正する方法はありますか?

4

1 に答える 1

0

さて、私は私の問題の解決策を見つけたことを知っています。

HtmlGraphicImage をオーバーライドするだけです。
Extended-Class を変更して、GraphicImage が常に空の文字列を返し、ツールチップの値をフェッチするようにしました。

したがって、Extende クラスは次のようになります。

public class ExtendedCSVExporter extends CSVExporter 
{

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

}
于 2013-06-18T12:46:32.493 に答える