Richfaces 3 comment faire datascroller faire vrai pagination
Je suis à essayer de comprendre comment faire de la vrai pagination avec richfaces datascroller.
Actuellement ma requête extrait toutes les données d'une table et que je le veux ainsi, lorsque vous cliquez sur le bouton suivant de la datascroller, il interroge la base de données pour les 20 prochaines lignes.
Je comprends comment écrire la requête pour limiter les lignes, mais je ne suis pas sûr de la façon d'obtenir le datascroller du bouton suivant pour appeler une méthode spécifique.
Je vois il y a beaucoup de gens l'affichage sur l'Richfaces forums de solutions possibles, mais ils utilisent tous un dataModel. Depuis que je ne suis pas à l'aide d'un ORM, je ne suis pas sûr de savoir comment je peux adapter ces solutions à ce que j'ai.
Toute aide est appréciée.
<rich:extendedDataTable id="resultsTable" value="#{tableBacking.results}" var="results" sortMode="single" rowKeyVar="row">
<rich:columns value="#{tableBacking.columns == null ? '' : tableBacking.columns}" var="columns" index="ind" id="column#{ind}" sortBy="#{results[ind].data}" rendered="#{tableBacking.columns != null}">
<f:facet name="header">
<h:outputText value="#{columns.columnDescription}" />
</f:facet>
<h:outputText value="#{results[ind].data}" />
</rich:columns>
</rich:extendedDataTable>
<rich:datascroller for="resultsTable" page="#{tableBacking.page}" renderIfSinglePage="false" />
Backing bean
public class TableBacking {
private List<List<TableData>> results = null;
private int page = 0;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public List<List<TableData>> getResults() throws Exception {
return results;
}
public void setResults(List<List<TableData>> results) {
this.results = results;
}
private void getData(String whereClause) {
try {
DataDao dd = new DataDao();
results = dd.getData(); //dd.getData just runs a query on a table and puts the results in a List of lists.
} catch (Exception e) {}
}
OriginalL'auteur Catfish | 2013-01-07
Vous devez vous connecter pour publier un commentaire.
Essayer de faire ceci :
JSF Trucs:
Java BackBean Trucs:
Java PagedList
L'astuce consiste à régler le montant total de la propriété de
PagedList
de classe avec le comte de ladataTable
dans la base de données et définir la paginé éléments dans la liste dePageList
.Désolé pour mon mauvais anglais 😛
OriginalL'auteur Carlos León
Vous devez lier votre
rich:extendedDataTable
à un attribut dans le backing bean.Java
Après que vous liez votre point de vue
xhtml
<rich:extendedDataTable id="resultsTable" value="#{tableBacking.results}" var="results" sortMode="single" rowKeyVar="row" binding="#{tableBacking.Table}">
Richfaces
HtmlExtendedDataTable
a une méthode pour vérifier le nombre de lignes affichées par page, appelégetRows()
. Lorsque bean initialise il suffit de charger la première page des valeurs, selon que (vous pouvez charger uniquement les id des éléments sur le reste des pages et plus tard, quand vous allez accéder à la page à charger en fonction de l'id).<rich:datascroller/>
aussi un événement qui est déclenché lorsqu'un bouton est cliqué et que vous pouvez acquérir à partir de votre sauvegarde de haricot de cette façon:xhtml
Java
public String actionOnPageChange(DataScrollerEvent event)
Ce
DataScrollerEvent
comprend que la page a été cliqué par l'utilisateur, que vous pouvez obtenir à l'aide degetNewScrolVal()
. Lorsque cela se produit, il suffit de charger les valeurs de la page correspondante à votre table et c'est tout.Je ne suis pas sûr de comprendre ce que vous entendez par "
you can load only the id's of the elements on the rest of the pages and later when you're going to access the page load them based on the id
"Vous avez dit que vous n'êtes pas à l'aide d'un ORM. J'ai utilisé cette solution avec mise en veille prolongée, le chargement de l'ensemble des données, mais certains attributs de chargement paresseux, avec cela, lorsque je demande une page, je peux charger que les objets et empêcher le chargement différé des exceptions. Dans votre cas, je pense que vous pouvez stocker faux objets (qui n'aura l'attribut id attribué) dans les pages visibles. Comment y parvenir? Le chargement de l'ensemble de la liste des id de début et de prendre la relative info que lorsqu'il est nécessaire. Je ne sais pas comment votre modèle fonctionne, je viens de donner une idée.
OriginalL'auteur Xtreme Biker
La meilleure solution que j'ai trouvé est la cartographie de l'attribut "value" de la table de données à une org.richfaces.de modèle.ExtendedTableDataModelproperty. Vous ensuite initialiser le ExtendedTableDataModel avec une instance de org.richfaces.de modèle.DataProvider. Exemple:
Dans la vue:
Dans le bean:
OriginalL'auteur Martín Straus