0

フィルタリングが有効になっている xhtml ビューにデータテーブルがあります。さらに、コンテキスト メニューに Primefaces エクスポート (Excel 用) 機能があります。データテーブルをフィルタリングせずにこの関数を使用すると正常に動作しますが、最初にフィルタリングしてデータをエクスポートすると、空の行を含むファイルが得られます。

これは私のコードです:

<p:panel header="#{msg['prs.list']}">
    <p:contextMenu for="persons">
        <p:menuitem value="#{msg['com.view']}" icon="#{msg['icon.view']}"
                    action="#{personBean.redirectToEditPerson}"/>
        <p:menuitem value="#{msg['student.new']}" icon="#{msg['icon.new']}"
                    action="#{personBean.redirectToNewStudent}"/>
        <p:menuitem value="#{msg['prs.new']}" icon="#{msg['icon.new']}"
                    url="edit.xhtml"/>
        <p:menuitem value="#{msg['report.export.excel']}" ajax="false" icon="#{msg['icon.export']}">
            <p:dataExporter type="xls" target="persons" fileName="export"  />
        </p:menuitem>
    </p:contextMenu>
    <p:dataTable id="persons" var="person" value="#{personBean.personList}"
                 rowKey="#{person.id}" selection="#{personBean.selectedPerson}" selectionMode="single"
                 emptyMessage="#{msg['com.noEntries']}" paginator="true" rows="15">

        <p:column headerText="Id">
            <h:outputText value="#{person.id}"/>
        </p:column>

        <p:column headerText="#{msg['prs.name']}" filterBy="name" filterMatchMode="contains">
            <h:outputText value="#{person.name}"/>
        </p:column>

        <p:column headerText="#{msg['prs.surname']}" filterBy="surname" filterMatchMode="contains">
            <h:outputText value="#{person.surname}"/>
        </p:column>

        <p:column headerText="#{msg['prs.email']}" filterBy="email" filterMatchMode="contains">
            <h:outputText value="#{person.email}"/>
        </p:column>

    </p:dataTable>
    <f:facet name="footer">
        <p:button value="#{msg['prs.new']}" icon="#{msg['icon.new']}"
                  outcome="edit"/>
    </f:facet>
</p:panel>

Wildfly 8でPrimefaces 4、JSF 2、およびJava 7を使用しています

4

1 に答える 1

2

解決しました。ログに、データ テーブルのfilteredValue プロパティに関する警告が見つかりました。

[0m[33m17:26:45,701 WARNING [org.primefaces.component.datatable.DataTable] (default task-4) DataTable form:persons has filtering enabled but no filteredValue model reference is defined, for backward compatibility falling back to page viewstate method to keep filteredValue. It is highly suggested to use filtering with a filteredValue model reference as viewstate method is deprecated and will be removed in future.

したがって、このプロパティを追加して問題を解決しました

<p:dataTable id="persons" var="person" value="#{personBean.personList}" 
    rowKey="#{person.id}" selection="#{personBean.selectedPerson}" 
    selectionMode="single" emptyMessage="#{msg['com.noEntries']}" 
    paginator="true" rows="15" filteredValue="#{personBean.filtered}">

また、PersonBean にも次のプロパティを追加しました。

private List<PersonEntity> filtered;
public List<PersonEntity> getFiltered() { return filtered; }
public void setFiltered(List<PersonEntity> filtered) { this.filtered = filtered; }
于 2014-09-02T12:37:46.030 に答える