2

Prime Faces データ エクスポーター コンポーネントを使用しようとしています。

<p:dataExporter type="xls" target="table_name" fileName="summaries"/>  

target 属性は、データ テーブルの ID を指す必要があるようです。私のページには、2 回含まれる複合コンポーネントがあります。データの取得元を示す 1 つのパラメーターを使用します。そのため、複合コンポーネントは同じテーブルを 2 回レンダリングしますが、データは異なります。

両方のテーブルのエクスポーターが必要です。私の複合コンポーネントには次のものがあります。

<p:dataTable id="overview"

もちろん、これが 2 回レンダリングされると、JSF は動的に ID を生成します。

form:tabView:j_id1693604892_4df53909:overview

この状況で Prime Faces データ エクスポーターを動作させる方法はありますか?

ありがとう。

4

1 に答える 1

0

DataExporter.java からのコード (簡略化された Primefaces ソース)

String tableId = (String) target.getValue(elContext);

Exporter exporter = ExporterFactory.getExporterForType(exportAs);

UIComponent component = event.getComponent().findComponent(tableId);

if(component == null) {
    throw new FacesException("Cannot find component \"" + tableId + "\" in view.");
}

if(!(component instanceof DataTable)) {
    throw new FacesException("Unsupported datasource target:\"" + component.getClass().getName() + "\", exporter must target a PrimeFaces DataTable.");
}

DataTable table = (DataTable) component;
exporter.export(context, table, outputFileName, isPageOnly, isSelectionOnly, encodingType, preProcessor, postProcessor);

そのため、複数のコンポーネントはサポートされていません。

お手並みをみせてもらおう:

  1. データテーブル ID を別のパラメーターとして複合コンポーネントに渡します。

  2. 複合コンポーネントに id を付与します。ネーミング コンテナであるため、この ID を子コンポーネントの先頭に追加します。このようにして、好きなように参照できます。

于 2013-02-18T14:53:30.217 に答える