Primefaces 4.0 datatable分页和过滤问题

时间:2013-12-10 08:15:26

标签: java jsf jsf-2 primefaces

我有数据表,代码如下。

<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()。

1 个答案:

答案 0 :(得分:0)

您没有在PoiBacking向我们提供您的代码,因此我不知道PoiBacking中是否有错误。

然而,我尝试了你的代码并发现每件事情都很好。

检查一下:

Page(已删除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中的每个属性设置为String,因为您没有提及它):

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