【问题标题】:Primefaces 4.0 datatable pagination and filter issuePrimefaces 4.0 数据表分页和过滤器问题
【发布时间】:2013-12-10 08:15:26
【问题描述】:

我有数据表,代码如下。

<h:form id="listaPoi">
            <p:dataTable id="lokacije" var="poi" value="#{poiBacking.listaPoiLokacija}" 
                rowIndexVar="rowIndex" styleClass="nonsortable" paginator="true" rows="20"
                paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                rowsPerPageTemplate="20,50,100" filteredValue="#{poiBacking.filteredPoi}"
                emptyMessage="Nisu pronađeni POI za traženi upit">
                <p:column filterBy="grad" filterMatchMode="contains">
                    <f:facet name="header">
                        <h:outputText value="Mjesto" />
                    </f:facet>
                    <h:outputText value="#{poi.grad}" />
                </p:column>

                <p:column filterBy="adresa" filterMatchMode="contains">
                    <f:facet name="header">
                        <h:outputText value="Adresa" />
                    </f:facet>
                    <h:outputText value="#{poi.adresa}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Geolat" />
                    </f:facet>
                    <h:outputText value="#{poi.geolat}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Geolon" />
                    </f:facet>
                    <h:outputText value="#{poi.geolon}" />
                </p:column>

                <p:column>
                    <f:facet name="header">
                    </f:facet>
                    <p:commandButton icon="ui-icon-pencil" value="Uredi lokaciju"
                        actionListener="#{poiBacking.getPois(poi.geolat,poi.geolon)}"
                        action="#{poiBacking.setLinkUpdate()}"
                        oncomplete="PF('poiDialog').show()" update=":unos,:poiDialogId,:toolbar" />
                </p:column>
            </p:dataTable>
        </h:form>

问题是当我点击第二页或任何其他页面时,数据表只显示第一条记录。如果我过滤,结果是一样的。在过滤值的支持 bean 列表中包含所有值,但也只显示第一个。

PoiBacking 中的列表:

private List<PoiLokacija> listaPoiLokacija;
private List<PoiLokacija> filteredPoi;

listaPoiLokacija 填入@PostConstruct 方法init()。

【问题讨论】:

    标签: java jsf jsf-2 primefaces


    【解决方案1】:

    您没有在PoiBacking 中向我们提供您的代码,所以我不知道PoiBacking 中是否有问题。

    但是,我尝试了您的代码,发现一切正常。

    检查一下:

    页面(已删除oncomplete="PF('poiDialog').show()" update=":unos,:poiDialogId,:toolbar",因为我在您的代码中找不到它们):

     <h:form id="listaPoi">
            <p:dataTable id="lokacije" var="poi" value="#{poiBacking.listaPoiLokacija}" 
                rowIndexVar="rowIndex" styleClass="nonsortable" paginator="true" rows="3"
                paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                rowsPerPageTemplate="20,50,100" filteredValue="#{poiBacking.filteredPoi}"
                emptyMessage="Nisu pronađeni POI za traženi upit">
                <p:column filterBy="grad" filterMatchMode="contains">
                    <f:facet name="header">
                        <h:outputText value="Mjesto" />
                    </f:facet>
                    <h:outputText value="#{poi.grad}" />
                </p:column>
    
                <p:column filterBy="adresa" filterMatchMode="contains">
                    <f:facet name="header">
                        <h:outputText value="Adresa" />
                    </f:facet>
                    <h:outputText value="#{poi.adresa}" />
                </p:column>
    
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Geolat" />
                    </f:facet>
                    <h:outputText value="#{poi.geolat}" />
                </p:column>
    
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Geolon" />
                    </f:facet>
                    <h:outputText value="#{poi.geolon}" />
                </p:column>
    
                <p:column>
                    <f:facet name="header">
                    </f:facet>
                    <p:commandButton icon="ui-icon-pencil" value="Uredi lokaciju"
                        actionListener="#{poiBacking.getPois(poi.geolat,poi.geolon)}"
                        action="#{poiBacking.setLinkUpdate()}"
                        />
                </p:column>
            </p:dataTable>
        </h:form>
    

    Backing Bean(将PoiLokacija中的每个属性设置为字符串,因为你没有提到它):

    private List<PoiLokacija> listaPoiLokacija=new ArrayList<>();
    private List<PoiLokacija> filteredPoi=new ArrayList<>();
    
    @PostConstruct
    public void init(){
    
        listaPoiLokacija.add(new PoiLokacija("grad1", "adresa1", "geolat1", "geolon1"));
        listaPoiLokacija.add(new PoiLokacija("grad2", "adresa2", "geolat2", "geolon2"));
        listaPoiLokacija.add(new PoiLokacija("grad3", "adresa3", "geolat3", "geolon3"));
        listaPoiLokacija.add(new PoiLokacija("grad4", "adresa4", "geolat4", "geolon4"));
        listaPoiLokacija.add(new PoiLokacija("grad5", "adresa5", "geolat5", "geolon5"));
        listaPoiLokacija.add(new PoiLokacija("grad6", "adresa6", "geolat6", "geolon6"));
        filteredPoi.addAll(listaPoiLokacija);
    }
    public void getPois(String geolat,String geolon){
        System.out.println(geolat+","+geolon);
    }
    public void setLinkUpdate(){
        System.out.println("setLinkUpdate");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-30
      • 2012-08-24
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2013-07-30
      • 2014-01-04
      • 1970-01-01
      相关资源
      最近更新 更多