2016-01-04 1 views
2

У меня есть приложение (Websphere 8.5, Java EE6, PrimeFaces 5.3 на JSF 2+).Pagination не работает с данными PrimefacesTable с фильтром (только первый раз)

Когда я открываю эту страницу в браузере (пробовал Chrome и FF) и сначала попытаюсь перейти (в моем примере есть 2 страницы, 22 диапазона) - я получаю пустую таблицу (заголовок говорит 16-22 из 22, но таблица пуста) и по-прежнему остается пустой, когда я вернусь на первую страницу - вот как это выглядит: enter image description here

В случае, если я сначала отфильтрую таблицу - отличная разбивка на страницы.

Я видел подобное поведение с другими компонентами - например, commandButton на другой таблице, но это минимальное воспроизведение проблемы. Если я удалю фильтрацию - все будет хорошо.

У меня есть ошибка где-то, но не могу найти ее.

Просмотров содержит следующую форму:

<h:form id="form"> 
<p:dataTable id="mainTable" value="#{rangeManagementBean.allRanges}" 
      var="range1" filteredValue="#{rangeManagementBean.filteredRanges}" 
      paginator="true" 
      paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}" 
      rows="15"> 

      <p:column headerText="Site" sortBy="#{range1.siteName}" 
       filterBy="#{range1.siteName}" filterMatchMode="contains"> 
       <h:outputText value="#{range1.siteName}"> 
       </h:outputText> 
      </p:column> 
     </p:dataTable> 
</h:form> 

, отступая код боб:

@ViewScoped 
@ManagedBean(name = "rangeManagementBean") 
public class RangeManagementBean { 

private ArrayList<RangeDto> allRanges; 
private ArrayList<RangeDto> filteredRanges; 
@EJB 
private RangeProvider rangeProvider; 

@PostConstruct 
public void init(){ 
    setAllRanges(new ArrayList<RangeDto>(rangeProvider.getAllRangesDto())); 
    setFilteredRanges(new ArrayList<RangeDto>()); 
} 

public ArrayList<RangeDto> getFilteredRanges() { 
    return filteredRanges; 
} 

public void setFilteredRanges(ArrayList<RangeDto> filteredRanges) { 
    this.filteredRanges = filteredRanges; 
} 

public ArrayList<RangeDto> getAllRanges() { 
    return allRanges; 
} 

public void setAllRanges(ArrayList<RangeDto> allRanges) { 
    this.allRanges = allRanges; 
} 
} 

RangeDto является POJO с Струнные геттеры/сеттеры.

+0

Не уверен, что ваш диапазон фильтра. По '# {range1.start} - # {range1.end}' вы подразумеваете конкатенацию строк, например "str1 - str2", правильно? Вы пробовали с фильтром только с использованием одного атрибута, например 'range1.start'? –

+0

Да, это работает как конкатенация. Если я помещаю оба конца и начинаю в одном теге, он делает математику по строкам. – Anton

+0

Да, хотелось быть уверенным в том, что вы имели в виду :) Тогда я не вижу ясной ошибки, но я бы попробовал с одним атрибутом –

ответ

2

Это связано с filteredValue списка (т.е. #{rangeManagementBean.filteredRanges}) порожняком на первом:

setFilteredRanges(new ArrayList<RangeDto>()); 

Вы должны инициализировать его со всеми значениями:

setFilteredRanges(getAllRanges()); 
+0

Это все еще требуется для PF6.0? По мере того как я попробовал, он добавил строки 'System.out.println()' в setter, getter +, где я инициализировал список, и он всегда был перезаписан + установлен в 'null' или пуст. – Roland

Смежные вопросы