p:dataTable,延迟加载和全局过滤

时间:2012-08-03 12:41:46

标签: jsf jsf-2

我在dataTable中使用延迟加载,分页和全局过滤器

在延迟加载函数中,我添加了2个函数以支持2个场景:

1)当用户正在分页时

2)当用户在全局过滤器中添加值并按“Enter”

基本上我需要知道的是执行什么活动以决定使用什么功能。

dataTable中:

     <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));
    }

我正在使用primefaces 3.2

由于

1 个答案:

答案 0 :(得分:0)

你正在以错误的方式思考这个问题。无论用户做了什么,您都应该始终这样做:检索数据(应用过滤器,如果有的话)和分页(从pageSize开始返回first行。

为什么在有过滤器时你不包括'first'和'pageSize'参数?行必须以任何方式分页。否则用户将只能看到过滤结果的第一页。

此外,您必须覆盖getRowCount方法,以便您的表格显示正确的页数。