2008-09-16 28 views
4

J'ai une application JSF que je convertis pour utiliser des services web au lieu de requêtes de base de données. Il y a quelques listes extrêmement longues que avant pourraient être retournées facilement avec une requête SQL simple. Je voudrais comprendre comment mettre en œuvre la pagination en utilisant JSF/services web. Existe-t-il un bon modèle de conception pour faire des services Web paginés? En cas de problème, j'utilise actuellement l'implémentation de référence Apache MyFaces de JSF avec les extensions Tomahawk (un ensemble de composants JSF créés par l'équipe de développement de MyFaces avant sa donation à Apache).Comment faites-vous des listes paginées dans JavaServer Faces?

Répondre

2

Trinidad a un composant de table qui prend en charge la pagination, ce qui peut aider. Ce n'est pas idéal, mais fonctionne assez bien avec Seam, comme décrit dans le blog de Pete Muir Backing Trinidad's dataTable with Seam.

Si vous ne trouvez pas un composant JSF vous le souhaitez, vous aurez besoin d'écrire votre propre logique pour définir les paramètres pour limite et décalage dans vos requêtes EJB-QL (JPA).

2

Cela dépend si vous voulez effectuer une pagination côté client ou côté serveur. Si vous êtes serveur, vos services Web devront inclure quelques paramètres supplémentaires (par exemple "startFrom" et "pageSize") qui vous permettront de spécifier la "page" des données à récupérer. Votre service devra probablement également renvoyer la taille totale des résultats afin que vous puissiez générer un contrôle de pagination. Si vous décidez que cela représente trop d'efforts, vous pouvez effectuer une pagination côté client dans votre bean backing (ou obtenir un composant pour le faire pour vous), mais ce n'est pas recommandé si vous parlez de milliers d'objets!

1

Si vous récupérez immédiatement tous les résultats du service Web et que vous ne pouvez pas inclure la pagination dans l'appel de service Web réel, vous pouvez essayer de définir la liste d'éléments sur une propriété d'un bean géré. Ensuite, vous pouvez brancher que jusqu'à l'attribut « valeur » sur un Tomahawk dataTable:

http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataTable.html

et vous pouvez utiliser un Tomahawk dataScroller paginer sur la liste des éléments stockés dans cette propriété. Voici la référence pour ce composant, il fonctionne bien avec le composant dataTable:

http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc/t_dataScroller.html

Vous pouvez inclure ce dans les facettes en-tête/pied de page du dataTable ou comme compoment séparé (vous devez spécifier le id de dataTable dans l'attribut 'for' du dataScroller.

Il y a d'autres choses intéressantes que vous pouvez faire avec le dataTable, comme les détails de tri et de basculement pour chaque rangée, mais qui peuvent être implémentés une fois que la pagination de base fonctionne.

Espérons que ça aide!