user3073662
user3073662

Reputation: 311

Primefaces 4.0 datatable pagination and filter issue

I have datatable, code is below.

<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>

Problem is when i click on second or any other page, datatable shows only first record. If i filter, results are the same. In backing bean list for filtered values contains all values but also shows only first.

Lists in PoiBacking:

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

listaPoiLokacija is fill in @PostConstruct method init().

Upvotes: 0

Views: 789

Answers (1)

nosnhoj
nosnhoj

Reputation: 793

You didn't give us your code in PoiBacking, so I have no idea if there are something wrong in PoiBacking.

However, I tried your code and find every thing work just fine.

Check this:

Page(Deleted oncomplete="PF('poiDialog').show()" update=":unos,:poiDialogId,:toolbar" since I can't find them in your code) :

 <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(Set every attributes in PoiLokacija as String since you didn't mention it):

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

Upvotes: 0

Related Questions