私も同意します。Exporter の動作をカスタマイズするこのアプローチが最も柔軟で、最も苦痛が少ないと思います。
これでpreProcessor/postProcessorメソッドを使用することに興味がある人はいますか? これを行う方法の例を次に示します。
上記の回答からメソッドを少し変更してみました。
public void exportPDF(DataTable table, String filename,
String preProcessor, String postProcessor) throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
ExpressionFactory factory = context.getApplication().getExpressionFactory();
MethodExpression preProcessorME = factory.createMethodExpression(
context.getELContext(), preProcessor, null, new Class[] {Object.class});
MethodExpression postProcessorME = factory.createMethodExpression(
context.getELContext(), postProcessor, null, new Class[] {Object.class});
Exporter exporter = new ExtendedPDFExporter();
exporter.export(context, table, filename, false, false, "UTF-8",
preProcessorMe, postProcessorME);
context.responseComplete();
}
そして、これはあなたのページでそれをどのように使用するかです (繰り返しますが、上記の例を変更しただけです):
<p:dataTable binding="#{table}" editable="true" ...>
<p:column><p:cellEditor>...</p:cellEditor></p:column>
<p:column><p:cellEditor>...</p:cellEditor></p:column>
<p:column><p:cellEditor>...</p:cellEditor></p:column>
<p:column exportable="false"><p:rowEditor /></p:column>
</p:dataTable>
<h:commandLink value="PDF" action="#{bean.exportPDF(table, 'filename',
'#{yourBean.preProcessPDF}', '#{yourBean.postProcessPDF}')}" />
入れ子になった EL ステートメントがないことに注意してください(とにかく許可されていません)。最後の 2 つの引数は、EL 式を含む単純な文字列です。