5

Primefaces 3.4を使用しており、セル内編集を使用してデータテーブルをエクスポートしようとしています。うまくいかないようです。

私は次のことをしました:

org.primefaces.component.export.Exporter行143を変更し、これを追加しました。

else if (component instanceof CellEditor) { // Handle in-cell editable datatables
    return exportValue(context, ((CellEditor) component).getFacet("output"));
}

これにより、データを含む実際のセルの右側に余分な行と列が追加されます。Excelファイルでは、「表示」されていないので問題ありませんが、PDFは見栄えが悪くなります。

  1. ソースコードを変更せずにPF3.4でこれをサポートする方法はありますか?
  2. 上記の答えが否定的である場合、追加の行/列なしでPDFを生成させることはできますか?
4

4 に答える 4

5

ソースコードを変更せずにPF3.4でこれをサポートする方法はありますか?

いいえ。カスタムExporter実装/オーバーライドを提供する必要があります。私はすでにこれを数ヶ月前に問題4013として報告しました。だけでなく、( PDF / XML / XLS / CSVレポートで表示したいブール状態を表示するために画像を使用しています)についてCellEditorも言及しています。HtmlGraphicImagealt

あなたができることは、それがもっと注目されるように投票するか、PFフォーラムで再質問することだけです。


上記の答えが否定的である場合、追加の行/列なしでPDFを生成させることはできますか?

exportable="false"属性を設定することにより、列をエクスポートから非表示にすることができます。

<p:column exportable="false">
于 2012-10-03T11:56:10.400 に答える
3

ソースコードを変更せずにPF3.4でこれをサポートする方法はありますか?

はい。回避策があります

列のコピーを2つ作成します。1つ目はユーザー用で、2つ目はdataExporter用です。

最初の列で設定exportable="false"することにより、dataExporterから非表示にします。

style="display: none"2列目に設定することで、ユーザーから非表示にします。

ちなみに、dataExporterはheaderTextをサポートしていないため、headerTextをエクスポートする必要がある場合は、古いスタイルを使用する必要があります<f:facet name="header">

<p:column headerText="CLOSE DATE" exportable="false">
    <p:cellEditor>
        <f:facet name="output">
            <h:outputText value="#{sale.closedate}"/>
        </f:facet>
        <f:facet name="input">
            <h:inputText value="#{sale.closedate}"/>
        </f:facet>
    </p:cellEditor>
</p:column>

<p:column style="display: none">
    <f:facet name="header">
         CLOSE DATE
    </f:facet>
    <h:outputText value="#{sale.closedate}"/>
</p:column>

ただし、この回避策は明らかに醜く、dataTableのサイズが2倍になり、レンダリングが困難になります

BalusCが述べたように、私たちは彼らのフォーラムに投票したり投稿したりして、この問題についての認識を高める必要があります。

于 2012-10-03T12:31:43.190 に答える
1

私がこれまでに見つけた唯一の解決策は、Exporterを拡張する独自のクラスを作成し、メソッドをオーバーライドすることprotected String exportValue(FacesContext context, UIComponent component)です。追加する必要があるのは else if (component instanceof CellEditor) { return exportValue(context, ((CellEditor) component).getFacet("output")); }

于 2013-07-25T14:23:24.830 に答える
0

答えは...セルエディタでデータテーブルを作成する...です。

セルエディタを使用せずに同じフィールドを使用して別のテーブルを作成した後、

エクスポータは2番目のテーブルを参照する必要があります。:D

あいさつ!

于 2013-06-07T20:29:03.413 に答える