Printemps de données Paginable et LIMIT/OFFSET
je suis à la recherche de la migration de notre traditionnel jpa/dao solution de Printemps de Données.
Cependant, l'un de nos avant-fin est SmartGWT, et leurs lié aux données des composants de données de charge progressivement en utilisant limit/offset seulement, ce qui rend difficile à utiliser Paginable.
Cela pose des problèmes, car il n'est pas certain que le limit/offset peut être traduit evently dans un numéro de page. (il peut varier selon la façon dont l'utilisateur fait défiler, l'écran est redimensionné, etc.).
J'ai regardé à la Tranche, etc, mais n'était pas en mesure de trouver un moyen d'utiliser la limite de/les valeurs de décalage de n'importe où.
Me demandais si quelqu'un a les pointeurs? Idéalement, je voudrais continuer à utiliser limit/offset, mais de les utiliser dans mon Référentiel des interfaces sans avoir à coder une mise en œuvre et de les définir manuellement comme je le fais maintenant (requête.setMaxResults etc.)
Edit: Pour clarifier la raison pour laquelle j'ai des questions - Le limit/offset peuvent différer entre l'initiale et ultérieure des données récupère dans un smartgwt composant. Pour un listgrid, de la première extraction peut avoir limite fixée à 89 par exemple, puisque c'est le nombre de lignes visibles à l'écran, et le décalage 0. La demande suivante, cependant, pourrait avoir un offset de 89, et la limite de 50, car c'est la composante "datapagesize" valeur de 50, de sorte que c'est ce qu'il va chercher quand je scroll vers le bas.
Si j'ai faites défiler jusqu'à vers le bas avant de le relâcher, il pourrait, selon les paramètres, de récupérer par exemple les lignes 159-209 à la place. Fondamentalement, il n'ya aucune garantie que l'offset est un multiple de quoi que ce soit. Il est difficile de convertir décalage de 17, limite de 5 pour une page.
- ne limite pas = la taille, et le décalage est juste de page * de la taille? qui est en défaut Paginable mise en œuvre?
- Non, car il peut varier. Dire que j'ai un Listgrid. Le SmartGWT logique sera d'abord définir un offset à 0, et une assez grande limite de charge ce qui peut être vu sur l'écran. Cela peut être de 50, 79, 99, etc. selon screensize, la taille du navigateur, etc. La prochaine fois, ce sera le "pagesize" de la valeur, par exemple, pourrait être 50. Puis, en fonction de la façon dont vous faites défiler, il pourrait la prochaine fois extraire les lignes de 250 à 300 par exemple. Mon problème est que je ne peux pas contrôler la première valeur LIMITE, pour l'essentiel, ni ce que smartgwt décide que le décalage est sur les demandes ultérieures.
Vous devez vous connecter pour publier un commentaire.
Pagebale implémentations ne utilisation
limit
etoffset
pour créer de la pagination. Lepage
valeur dans le constructeur est utilisé pour générer la valeur de décalage dans laAbstractPageRequest
classegetOffset
méthode:Si vous souhaitez utiliser uniquement
limit
etoffset
et jetez lepage
paramètre à partir de la combinaison, prendre un coup d'oeil à le Printemps de Données de la documentation sur support web, en particulier la partie sur la substitution de la configuration par défaut. Vous pouvez créer votre propre mise en œuvre dePageable
qui prendlimit
etoffset
que les arguments du constructeur et de la mettre en œuvre votre propreHandlerMethodArgumentResolver
à remplacer la normePageRequest
résoudre. Quick-and-dirty exemple:Paginable mise en œuvre
HandlerMethodArgumentResolver mise en œuvre
Pageable
comme argument, et il n'y aura pas de code supplémentaire dans vos contrôleurs nécessaires pour gérer votre version dePageable
. Ce sera également utile si vous utilisez Printemps HATEOAS.limit
etoffset
, vous pouvez avoir laHandlerMethodArgumentResolver
la carte de tous les paramètres pour créer votrePageRequest
de remplacement. Il n'y a aucune raison que vous ne pouvez pas prendre la demande dehttp://myapp/search/stuff?startrow=100&endrow=200
et de le traduire ànew BetterPageRequest(params.get('endrow')[0]-params.get('startrow')[0], params.get('startrow')[0]);
Et l'exemple
Laissez-moi savoir si ce que vous voulez