我有一个rich:dataTable,并为每列实现排序和过滤,其中一列我有一个复选框,用于选择当前页面中的所有行。
问题在于,当我选中第1页的全选复选框时,所有行都被正确选中,但是我切换到第2页,仍然选中了全选复选框,但基本上应该判断是否全部在第2页中选择了行,如果没有,则不应选中全选复选框。
所以我必须知道当前页面的所有对象,但如果对表进行排序和过滤,很难得到它。
有人能给我一些建议如何解决吗?
<rich:dataTable id="table"
value="#{model.displayedData}" var="data"
rows="#{model.itemsPerPage}">
<rich:column>
<f:facet name="header">
<h:panelGroup layout="block">
<h:selectBooleanCheckbox id="HeaderCheckBox"
disabled="#{model.selectAllDisabled}"
value="#{model.selectAllChecked}" immediate="true">
<a4j:support event="onclick" action="#{model.selectAll}" onclick="selectAll(this)"
reRender="table" status="commonstatus">
<a4j:actionparam assignTo="#{model.allCurrentPageItems}" name="allItems" value="getAllCurrentPageIds()" noEscape="true"/>
</a4j:support>
</h:selectBooleanCheckbox>
</h:panelGroup>
</f:facet>
<h:selectBooleanCheckbox
value="#{data.selected}"
disabled="#{data.disabled}" immediate="true">
<a4j:support event="onclick" action="#{model.select}" onclick="clickcheckBoxhandling(this);"
reRender="table" status="commonstatus">
<a4j:actionparam assignTo="#{model.seletedId}" name="seletedItem" value="#{data.id}" />
<a4j:actionparam assignTo="#{model.selected}" name="itemSelection" value="this.checked" noEscape="true"/>
</a4j:support>
</h:selectBooleanCheckbox>
</rich:column>
服务器端模型bean是:
private String seletedId;
private boolean selected;
private boolean selectAllDisabled;
private boolean selectAllChecked;
public List<DataModel> getDisplayedData() {
if (filter.isFilterEmpty()) {
displayedData = allData;
} else {
displayedData = filter.getFilteredData(allData);
}
return displayedData;
}
所以我需要设置&#34; selectAllChecked&#34;用户切换到不同页面时按正确属性,按每列排序并按每列过滤。 因此,我想获得精确的当前页面数据列表,即使是已排序和过滤,以便我可以判断是否选择了所有当前页面数据来设置&#34; selectAllChecked&#34;属性。
所以问题是,我怎么能得到当前页面的行对象? 以上是否还有其他任何方式来实现我的请求?