Estou desenvolvendo um aplicação usando o JSF 1.1 e infelizmente tenho de usar esta versão pois é a versão homologada pela área de tecnologia de meu cliente.
Alguém poderia ajudar-me com um exemplo funcional de paginação em um DataTable.
Achei alguns exemplos na internet e do livro Core JavaServer Faces (JSF) mas não fui feliz pois todos eles apresentam erro qdo do deploy.
Não quero nada pronto mas pelo menos o caminho das pedras.
Consegui este exemplo e conseguir gerar um deploy mas ocorre um erro em tempo de execução.
PagerRenderer.java
packagecom.corejsf;importjava.io.IOException;importjava.util.Iterator;importjava.util.Map;importjavax.faces.component.NamingContainer;importjavax.faces.component.UIComponent;importjavax.faces.component.UIData;importjavax.faces.component.UIForm;importjavax.faces.context.FacesContext;importjavax.faces.context.ResponseWriter;importjavax.faces.el.ValueBinding;importjavax.faces.render.Renderer;publicclassPagerRendererextendsRenderer{publicvoidencodeBegin(FacesContextcontext,UIComponentcomponent)throwsIOException{Stringid=component.getClientId(context);UIComponentparent=component;while(!(parentinstanceofUIForm))parent=parent.getParent();StringformId=parent.getClientId(context);ResponseWriterwriter=context.getResponseWriter();StringstyleClass=(String)get(context,component,"styleClass");StringselectedStyleClass=(String)get(context,component,"selectedStyleClass");StringdataTableId=(String)get(context,component,"dataTableId");Integera=(Integer)get(context,component,"showpages");intshowpages=a==null?0:a.intValue();// find the component with the given IDUIDatadata=(UIData)findComponent(context.getViewRoot(),getId(dataTableId,id),context);intfirst=data.getFirst();intitemcount=data.getRowCount();intpagesize=data.getRows();if(pagesize<=0)pagesize=itemcount;intpages=itemcount/pagesize;if(itemcount%pagesize!=0)pages++;intcurrentPage=first/pagesize;if(first>=itemcount-pagesize)currentPage=pages-1;intstartPage=0;intendPage=pages;if(showpages>0){startPage=(currentPage/showpages)*showpages;endPage=Math.min(startPage+showpages,pages);}if(currentPage>0)writeLink(writer,component,formId,id,"<",styleClass);if(startPage>0)writeLink(writer,component,formId,id,"<<",styleClass);for(inti=startPage;i<endPage;i++){writeLink(writer,component,formId,id,""+(i+1),i==currentPage?selectedStyleClass:styleClass);}if(endPage<pages)writeLink(writer,component,formId,id,">>",styleClass);if(first<itemcount-pagesize)writeLink(writer,component,formId,id,">",styleClass);// hidden field to hold resultwriteHiddenField(writer,component,id);}privatevoidwriteLink(ResponseWriterwriter,UIComponentcomponent,StringformId,Stringid,Stringvalue,StringstyleClass)throwsIOException{writer.writeText(" ",null);writer.startElement("a",component);writer.writeAttribute("href","#",null);writer.writeAttribute("onclick",onclickCode(formId,id,value),null);if(styleClass!=null)writer.writeAttribute("class",styleClass,"styleClass");writer.writeText(value,null);writer.endElement("a");}privateStringonclickCode(StringformId,Stringid,Stringvalue){StringBufferbuffer=newStringBuffer();buffer.append("document.forms[");buffer.append("'");buffer.append(formId);buffer.append("'");buffer.append("]['");buffer.append(id);buffer.append("'].value='");buffer.append(value);buffer.append("';");buffer.append(" document.forms[");buffer.append("'");buffer.append(formId);buffer.append("'");buffer.append("].submit()");buffer.append("; return false;");returnbuffer.toString();}privatevoidwriteHiddenField(ResponseWriterwriter,UIComponentcomponent,Stringid)throwsIOException{writer.startElement("input",component);writer.writeAttribute("type","hidden",null);writer.writeAttribute("name",id,null);writer.endElement("input");}publicvoiddecode(FacesContextcontext,UIComponentcomponent){Stringid=component.getClientId(context);Mapparameters=context.getExternalContext().getRequestParameterMap();Stringresponse=(String)parameters.get(id);StringdataTableId=(String)get(context,component,"dataTableId");Integera=(Integer)get(context,component,"showpages");intshowpages=a==null?0:a.intValue();UIDatadata=(UIData)findComponent(context.getViewRoot(),getId(dataTableId,id),context);intfirst=data.getFirst();intitemcount=data.getRowCount();intpagesize=data.getRows();if(pagesize<=0)pagesize=itemcount;if(response.equals("<"))first-=pagesize;elseif(response.equals(">"))first+=pagesize;elseif(response.equals("<<"))first-=pagesize*showpages;elseif(response.equals(">>"))first+=pagesize*showpages;else{intpage=Integer.parseInt(response);first=(page-1)*pagesize;}if(first+pagesize>itemcount)first=itemcount-pagesize;if(first<0)first=0;data.setFirst(first);}privatestaticObjectget(FacesContextcontext,UIComponentcomponent,Stringname){ValueBindingbinding=component.getValueBinding(name);if(binding!=null)returnbinding.getValue(context);elsereturncomponent.getAttributes().get(name);}privatestaticUIComponentfindComponent(UIComponentcomponent,Stringid,FacesContextcontext){StringcomponentId=component.getClientId(context);if(componentId.equals(id))returncomponent;Iteratorkids=component.getChildren().iterator();while(kids.hasNext()){UIComponentkid=(UIComponent)kids.next();UIComponentfound=findComponent(kid,id,context);if(found!=null)returnfound;}returnnull;}privatestaticStringgetId(Stringid,StringbaseId){Stringseparator=""+NamingContainer.SEPARATOR_CHAR;String[]idSplit=id.split(separator);String[]baseIdSplit=baseId.split(separator);StringBufferbuffer=newStringBuffer();for(inti=0;i<baseIdSplit.length-idSplit.length;i++){buffer.append(baseIdSplit[i]);buffer.append(separator);}buffer.append(id);returnbuffer.toString();}}