Reputation: 1419
I have an application (Websphere 8.5, Java EE6, PrimeFaces 5.3 on JSF 2+).
When I open this page in browser (tried Chrome and FF) and first try to navigate (there are 2 pages, 22 ranges in my example) - I get empty table (header says 16-22 out of 22 but the table is empty), and is still empty whenever I go back to first page - here how it looks like:
In case I filter table first - pagination works great.
I've seen similar behavior with another components - eg commandButton on other table, but this is minimal reproduction of the issue. If I remove the filtering - everything works fine.
I guess I have an error somewhere but can't find it.
Views contains following form:
<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>
while backing bean code is:
@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 is POJO with String getters/setters.
Upvotes: 2
Views: 4202
Reputation: 15050
It's due to the filteredValue
list (i.e. #{rangeManagementBean.filteredRanges}
) being empty at first:
setFilteredRanges(new ArrayList<RangeDto>());
You have to initalize it with all values:
setFilteredRanges(getAllRanges());
Upvotes: 3