[PrimeFaces / datatable] Pagination ne marche pas
Bonjour a tous
je développe une application qui manipule un énorme volume de donnée. Mon environnement de développement est : spring 3+hibernate 4+jsf2+primefaces.
Pour pouvoir gérer les données j'ai choisi la "lazyloading dataTable" de primefaces.
Sauf que lors de l'execution, ca m'affiche uniquement les 10 premieres lignes de la BD. et si je veux passer a la page suivante ca marche pas.
la page xhtml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head><title>Welcome to JSF_PrimeFaces_Spring_Hibernate Project</title></h:head>
<body>
<f:view>
<h:form id="form">
<p:dataTable var="car" value="#{tableMB.lazyModel}" paginator="true" rows="10"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="5,10,15" selectionMode="single" selection="#{tableMB.selectedCar}" id="carTable" lazy="true">
<p:ajax event="rowSelect" listener="#{tableMB.onRowSelect}" update=":form:display" oncomplete="carDialog.show()" />
<p:column headerText="Constructeur" sortBy="#{car.consi}" filterBy="#{car.consi}">
<h:outputText value="#{car.consi}" />
</p:column>
<p:column headerText="BSC" sortBy="#{car.nomBsc}" filterBy="#{car.nomBsc}">
<h:outputText value="#{car.nomBsc}" />
</p:column>
<p:column headerText="Cellule" sortBy="#{car.nomCell}" filterBy="#{car.nomCell}">
<h:outputText value="#{car.nomCell}" />
</p:column>
</p:dataTable>
<p:dialog header="Car Detail" widgetVar="carDialog" resizable="false"
showEffect="explode" hideEffect="explode">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputText value="consi:" />
<h:outputText value="#{tableMB.selectedCar.consi}" style="font-weight:bold"/>
<h:outputText value="BSC:" />
<h:outputText value="#{tableMB.selectedCar.nomBsc}" style="font-weight:bold"/>
<h:outputText value="Cellule:" />
<h:outputText value="#{tableBean.selectedCar.nomCell}" style="font-weight:bold"/>
</h:panelGrid>
</p:dialog>
</h:form>
</f:view>
</body>
</html> |
la managedBean
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| package com.otv.managed.bean;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import org.primefaces.model.LazyDataModel;
import com.otv.model.Current;
import com.otv.service.ICurrentService;
@ManagedBean(name="tableMB")
@SessionScoped
public class TableBean {
@ManagedProperty(value="#{CurrentService}")
ICurrentService currentService;
private LazyDataModel<Current> lazyModel;
private Current selectedCar;
private List<Current> current;
public ICurrentService getCurrentService() {
return currentService;
}
public void setCurrentService(ICurrentService currentService) {
this.currentService = currentService;
}
public TableBean() {
lazyModel = new LazyCellDataModel(current);
}
@PostConstruct
public List<Current> getCurrent() {
return getCurrentService().ListeAll();
// return current;
}
public void setCurrent(List<Current> current) {
this.current = current;
}
public Current getSelectedCar() {
return selectedCar;
}
public void setSelectedCar(Current selectedCar) {
this.selectedCar = selectedCar;
}
public LazyDataModel<Current> getLazyModel() {
lazyModel= new LazyCellDataModel(getCurrent());
// lazyModel = new LazyIdiomasDataModel(idiomasBo.findAllIdiomas());
// return lazyModel;
return lazyModel;
}
public void setLazyModel(LazyDataModel<Current> lazyModel) {
this.lazyModel = lazyModel;
}
} |
la dataModel
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
| package com.otv.managed.bean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
import com.otv.model.Current;
public class LazyCellDataModel extends LazyDataModel<Current> implements
Serializable {
private static final long serialVersionUID = 1L;
List<Current> dataSource;
private int pageSize;
private int rowIndex;
private int rowCount;
public List<Current> getDataSource() {
return dataSource;
}
public void setDataSource(List<Current> dataSource) {
this.dataSource = dataSource;
}
public LazyCellDataModel(List<Current> dataSource) {
this.dataSource = dataSource;
}
@Override
public Current getRowData(String rowKey) {
for (Current car : dataSource) {
if (car.getNomCell().equals(rowKey))
return car;
}
return null;
}
@Override
public Object getRowKey(Current car) {
return car.getNomCell();
}
@Override
public List<Current> load(int first, int pageSize, String sortField,
SortOrder sortOrder, Map<String, String> filters) {
List<Current> data = new ArrayList<Current>();
// filter
for (Current car : dataSource) {
boolean match = true;
for (Iterator<String> it = filters.keySet().iterator(); it
.hasNext();) {
try {
String filterProperty = it.next();
String filterValue = filters.get(filterProperty);
String fieldValue = String.valueOf(car.getClass()
.getField(filterProperty).get(car));
if (filterValue == null
|| fieldValue.startsWith(filterValue)) {
match = true;
} else {
match = false;
break;
}
} catch (Exception e) {
match = false;
}
}
if (match) {
data.add(car);
}
}
// sort
if (sortField != null) {
Collections.sort(data, new LazySorter(sortField, sortOrder));
}
// rowCount
int dataSize = data.size();
this.setRowCount(dataSize);
// paginate
if (dataSize > pageSize) {
try {
return data.subList(first, first + pageSize);
} catch (IndexOutOfBoundsException e) {
return data.subList(first, first + (dataSize % pageSize));
}
} else {
return data;
}
}
} |
et le dao injecté dans la managedBean
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| package com.otv.dao;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.SessionFactory;
import com.otv.model.Current;
public class CurrentDAO implements ICurrentDAO {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@SuppressWarnings("unchecked")
public List<Current> listAll() {
List<Current> list = new ArrayList<Current>();
List<Object> maListe = new ArrayList<Object>();
maListe = getSessionFactory()
.getCurrentSession()
.createSQLQuery(
"select consi, nombsc,nombts, nomsite, lac, ci, nomcell from vcurrentcell")
.list();
for (int i = 0; i < maListe.size(); i++) {
// nombts, nomsite, lac, ci,
Object obj[] = (Object[]) maListe.get(i);
Current c = new Current();
c.setConsi(obj[0].toString());
c.setNomBsc(obj[1].toString());
c.setNomBts(obj[2].toString());
c.setNomSite(obj[3].toString());
c.setLac(obj[4].toString());
c.setCi(Integer.parseInt(obj[5].toString()));
c.setNomCell(obj[6].toString());
list.add(c);
}
return list;
}
public void onclick(int pageNum, int pageSize)
{
pageNum +=20;
pageSize+=20;
}
} |
quelqu'un peut m'aider :cry: