我正在尝试使用Prime Faces数据导出器组件:
<p:dataExporter type="xls" target="table_name" fileName="summaries"/>
目标属性似乎需要指向数据表的id。在我的页面上,我有一个包含两次的复合组件。它获取一个参数,告诉它从哪里获取数据。因此,复合组件会两次渲染同一个表,但使用不同的数据。
两张桌子我都要出口商。在我的复合组件中,我有:
<p:dataTable id="overview"
当然,当这两次呈现时,JSF会动态生成id,例如
form:tabView:j_id1693604892_4df53909:overview
在这种情况下,我有什么办法让Prime Faces数据导出器工作吗?
谢谢。
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);
因此不支持多个组件。
你可以尝试的:
将数据表id作为一个单独的参数传递给复合组件。
正在为复合组件提供id。因为它是一个命名容器,所以它将这个id预先添加到它的子组件中。这样你就可以随心所欲地引用它。