jsf - CommandLink inside the datatable doesn't work in some cases -


i have commandlink/commandbutton element of column in datatable. datatable integrated lazy model. code (not my, because primefaces showcase example) works perfect when number of records in table divisible page size. example page size 5 , number of records 60. but, when number of records 61, when reach last record in table, action listener every button not called. i've tried change p:commandlink h:commandbutton/p:commandbuton. i've tried stackoverflow tips related use update="@form" or immediate="true" or disable ajax requests ajax="false", result same. me looks problem datatable rendering. please @ source code. example based on primefaces showcase, i've added new column (this 1 commandlink).

xhtml page:

<h:form id="form"> <p:datatable styleclass="test-class" id="data" var="car" value="#{tablebean.lazymodel}" scrollable="true" livescroll="true" scrollrows="5" scrollheight="200" lazy="true" >         <p:column headertext="model">             <h:outputtext value="#{car.model}" />         </p:column>          <p:column headertext="year">             <h:outputtext value="#{car.year}" />         </p:column>          <p:column headertext="manufacturer">             <h:outputtext value="#{car.manufacturer}" />         </p:column>          <p:column headertext="color">             <h:outputtext value="#{car.color}" />         </p:column>          <p:column headertext="color">             <p:commandlink value="test"                 actionlistener="#{tablebean.buttonlistener()}" />         </p:column>      </p:datatable> </h:form> 

datatable lazy model:

public class mylazymodel extends lazydatamodel<car> {   private list<car> datasource;  public mylazymodel(list<car> datasource) {     this.datasource = datasource; }  @override public car getrowdata(string rowkey) {     for(car car : datasource) {         if(car.getmodel().equals(rowkey))             return car;     }      return null; }  @override public object getrowkey(car car) {     return car.getmodel(); }  @override public list<car> load(int first, int pagesize, string sortfield, sortorder sortorder, map<string,string> filters) {     //rowcount     int datasize = datasource.size();     this.setrowcount(datasize);       //paginate     if(datasize > pagesize) {         try {             return datasource.sublist(first, first + pagesize);         }         catch(indexoutofboundsexception e) {             return datasource.sublist(first, first + (datasize % pagesize));         }     }     else {         return datasource;     }   } } 

datatable bean:

@managedbean @viewscoped public class tablebean {    private lazydatamodel<car> lazymodel;    private car selectedcar;    private list<car> cars;     public tablebean() {       populaterandomcars(cars, 60);       lazymodel = new mylazymodel(cars);   }     public void setselectedcar(car selectedcar) {       this.selectedcar = selectedcar;   }    public lazydatamodel<car> getlazymodel() {       return lazymodel;   }   


Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -