У меня есть приложение (Websphere 8.5, Java EE6, PrimeFaces 5.3 на JSF 2+).Pagination не работает с данными PrimefacesTable с фильтром (только первый раз)
Когда я открываю эту страницу в браузере (пробовал Chrome и FF) и сначала попытаюсь перейти (в моем примере есть 2 страницы, 22 диапазона) - я получаю пустую таблицу (заголовок говорит 16-22 из 22, но таблица пуста) и по-прежнему остается пустой, когда я вернусь на первую страницу - вот как это выглядит:
В случае, если я сначала отфильтрую таблицу - отличная разбивка на страницы.
Я видел подобное поведение с другими компонентами - например, 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 с Струнные геттеры/сеттеры.
Не уверен, что ваш диапазон фильтра. По '# {range1.start} - # {range1.end}' вы подразумеваете конкатенацию строк, например "str1 - str2", правильно? Вы пробовали с фильтром только с использованием одного атрибута, например 'range1.start'? –
Да, это работает как конкатенация. Если я помещаю оба конца и начинаю в одном теге, он делает математику по строкам. – Anton
Да, хотелось быть уверенным в том, что вы имели в виду :) Тогда я не вижу ясной ошибки, но я бы попробовал с одним атрибутом –