Jsf p:数据表、延迟加载和全局过滤器

Jsf p:数据表、延迟加载和全局过滤器,jsf,jsf-2,Jsf,Jsf 2,我在数据表中使用延迟加载、分页和全局过滤器 在延迟加载函数中,我添加了2个函数以支持2种方案: 1) 当用户正在分页时 2) 当用户在全局筛选器中添加值并按“Enter”时 基本上我需要知道的是为了决定使用什么函数执行了什么活动 数据表: <p:dataTable id="osTable" var="object" value="#{bean.lazyModel}"

我在数据表中使用延迟加载、分页和全局过滤器

在延迟加载函数中,我添加了2个函数以支持2种方案:

1) 当用户正在分页时

2) 当用户在全局筛选器中添加值并按“Enter”时

基本上我需要知道的是为了决定使用什么函数执行了什么活动

数据表:

     <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)结合起来。