2014-09-01 2 views
0

У меня есть datatable в моем представлении xhtml с включенной фильтрацией. Кроме того, в контекстном меню есть функция экспорта текстур (для Excel). Когда я использую эту функцию без фильтрации данных, она работает нормально, но когда я сначала фильтрую и ден экспортирую данные, я получаю файл с пустыми строками.Dataexporter возвращает пустые строки после фильтрации

Это мой код:

<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> 

Я использую Primefaces 4, JSF 2 и Java 7 на 8 Wildfly

ответ

1

решаемая. Я нашел предупреждение в своем журнале относительно свойства filterValue для datatable.

[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; } 
Смежные вопросы