Jsf p:数据表、延迟加载和全局过滤器
我在数据表中使用延迟加载、分页和全局过滤器 在延迟加载函数中,我添加了2个函数以支持2种方案: 1) 当用户正在分页时 2) 当用户在全局筛选器中添加值并按“Enter”时 基本上我需要知道的是为了决定使用什么函数执行了什么活动 数据表:Jsf p:数据表、延迟加载和全局过滤器,jsf,jsf-2,Jsf,Jsf 2,我在数据表中使用延迟加载、分页和全局过滤器 在延迟加载函数中,我添加了2个函数以支持2种方案: 1) 当用户正在分页时 2) 当用户在全局筛选器中添加值并按“Enter”时 基本上我需要知道的是为了决定使用什么函数执行了什么活动 数据表: <p:dataTable id="osTable" var="object" value="#{bean.lazyModel}"
<p:dataTable id="osTable"
var="object"
value="#{bean.lazyModel}"
selection="#{bean.selectedObjectSet}"
selectionMode="single"
rowKey="#{object.ID}"
paginator="true"
paginatorPosition="bottom"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="5,10,15"
rows="10"
widgetVar="objectTable">
<f:facet name="header">
<p:outputPanel style="float: right">
<h:outputText value="Search all fields:" />
<p:inputText id="globalFilter"
onkeypress="if (event.keyCode == 13) {objectSetTable.filter()}"
style="width:150px"/>
</p:outputPanel>
</f:facet>
加载函数:
@Override
public List<CfgSe2deMapping> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
List<Mapping> data = new ArrayList<Mapping>();
if (// if user press enter ) {
data.addAll(MappingHelper.getViaFilter(filters.get("globalFilter")));
} else {
data.addAll(MappingHelper.getViaOffSet(first + 1, first + pageSize));
}
@覆盖
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
列表数据=新的ArrayList();
if(//如果用户按enter键){
data.addAll(MappingHelper.getViaFilter(filters.get(“globalFilter”));
}否则{
addAll(MappingHelper.getViaOffSet(first+1,first+pageSize));
}
我使用的是PrimeFaces3.2
谢谢您的想法是错误的。无论用户做了什么,您都应该做同样的事情:检索数据(应用过滤器,如果有的话)并分页(返回
pageSize
从开始的行
)
当有筛选器时,为什么不包括“first”和“pageSize”参数?行必须以任何方式分页。否则,用户将只能看到筛选结果的第一页
此外,您还必须重写getRowCount方法,以便表显示正确的页数。关于getRowCount,我正在惰性构造函数中初始化它。我的解决方案是在load函数中,我正在检查isPaginationRequest&!filters.isEmpty()是否正确,你怎么想?@angus为什么你需要知道是分页请求还是筛选器发生了更改?即使你正在筛选,你也必须进行分页。筛选结果可能不适合一个页面。因此,你必须将两种方法(getViaFilter和getViaOffset)结合起来。