我有一个应用程序(Websphere 8.5,Java EE6,JSF 2+上的PrimeFaces 5.3)。
当我在浏览器中打开此页面时(尝试使用Chrome和FF)并首先尝试导航(在我的示例中有2个页面,22个范围) - 我得到空表(标题显示22个中的16-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>
支持bean代码是:
@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是带有字符串getter / setter的POJO。
答案 0 :(得分:2)
由于filteredValue
列表(即#{rangeManagementBean.filteredRanges}
)最初为空而导致:
setFilteredRanges(new ArrayList<RangeDto>());
你必须使用所有值来初始化它:
setFilteredRanges(getAllRanges());