La pagination est une fonction couramment utilisée dans les projets Web Java. Hier, de simples opérations de pagination et de pagination de recherche ont été implémentées dans le printemps MVC. Enregistrons-le ici. Le cadre utilisé est (MyBatis + Springmvc + printemps).
Nous avons d'abord besoin d'une classe d'outils paginée:
1. Pagination
import java.io.serializable; / ** * Pagination * / La page de classe publique implémente Serializable {private static final long SerialVersionUID = -3198048449643774660l; private int pagenow = 1; // Numéro de page actuel privé int pagesize = 4; // Nombre d'enregistrements affichés sur chaque page private int totalCount; // Nombre total de dossiers privé int totalPageCount; // Nombre total de pages @SuppressWarnings ("inutilisé") private int startPOS; // Démarrer la position, commencer à partir de 0 @SuppressWarnings ("inutilisé") privé booléen hasfirst; // y a-t-il une page d'accueil @SuppressWarnings ("inutilisé") Boolean Haspre; // y a-t-il une page précédente @SuppressWarnings ("" inutilisé ") Boolean Hasnext; // est-il une page suivante @SuppressWarng Haslast; // y a-t-il une dernière page / ** * passer le nombre total d'enregistrements et la page actuelle via le constructeur * @param totalCount * @param pagenow * / public (int totalCount, int pageNow) {this.totalcount = totalCount; this.pagenow = pagenow; } / ** * Obtenez le nombre total de pages, nombre total de pages = enregistrements totaux / nombre total de pages * @return * / public int getTotalPageCount () {totalPageCount = getTotalCount () / getPageSize (); retour (totalCount% pagesize == 0)? TotalPageCount: TotalPageCount + 1; } public void SettotalPageCount (int totalPageCount) {this.totalPageCount = totalPageCount; } public int getPageNow () {return pagenow; } public void SetPageNow (int pagenow) {this.pagenow = pagenow; } public int getPageSize () {return pagesize; } public void setPageSize (int pagesize) {this.pagesize = pagesize; } public int getTotalCount () {return totalCount; } public void SettotalCount (int totalCount) {this.totalCount = totalCount; } / ** * Obtenez la position initiale de l'enregistrement de sélection * @return * / public int getStartPos () {return (pageNow - 1) * pagesize; } public void setStartPos (int startpos) {this.startpos = startPos; } / ** * Est-ce la première page * @return * / public boolean ishasfirst () {return (pagenow == 1)? false: vrai; } public void sethasfirst (boolean hasfirst) {this.hasfirst = hasfirst; } / ** * Y a-t-il une page d'accueil * @return * / public boolean ishaspre () {// s'il y a une page d'accueil, il y a la page précédente, car il y a une page d'accueil, ce n'est pas la première page. Retour IshasFirst ()? vrai: false; } public void sethaspre (boolean haspre) {this.haspre = haspre; } / ** * Y a-t-il une page suivante * @return * / public boolean ishasnext () {// s'il y a une dernière page, il y a la page suivante, car il y a une dernière page, ce n'est pas la dernière page. retourner ishaslast ()? vrai: false; } public void sethasnext (boolean hasnext) {this.hasnext = hasnext; } / ** * Y a-t-il une dernière page * @return * / public boolean ishaslast () {// Si ce n'est pas la dernière page, il y aura un retour de dernière page (pageNow == getTotalCount ())? false: vrai; } public void sethaslast (boolean haslast) {this.haslast = haslast; }}Avec cette classe d'outils, écrivez d'abord l'instruction SQL dans le fichier de configuration xxxxmapper.xml de MyBatis, comme suit:
<! - Instruction Pagination SQL -> <select id = "selectProductsByPage" resultMap = "return Value Type"> SELECT * From Table Name Where user_id = # {userid, jdbcType = Integer} Limit # {startpos}, # {pagesize} </lect> <! resultType = "long"> SELECT COUNT (*) From Table Name Where user_id = # {userid, jdbcType = Integer} </lect>Ici, nous pouvons voir que les deux <lect> doivent passer respectivement dans les paramètres 3 et 1. À l'heure actuelle, écrivez une interface dans le fichier DAO correspondant IXXXXDAO pour écrire la méthode correspondante. Le nom de la méthode est le même que la valeur d'attribut ID dans mapper.xml:
/ ** * Passez plusieurs paramètres à l'aide de la méthode d'annotation, de la pagination du produit utilisateur, de la requête en connectant l'ID utilisateur * @param page * @param utilisateur * @return startpos}, # {pagesize} * / public list <ports> selectProductsBypage (@param (value = "startpos") Integer startpos, @ param (value = "pageSize") PageSize, @ param (value = "userId") Integer UserId); / ** * Obtenez des informations sur la quantité de produit et des requêtes en enregistrant l'ID utilisateur * @param utilisateur * @return * / public long getProductScount (@param (value = "userId") Integer UserId);Une fois la définition de l'interface terminée, vous devez écrire l'interface commerciale et la méthode d'implémentation correspondantes, définir une telle méthode dans l'interface, puis la remplacer dans la classe d'implémentation:
/ ** * PAGE Affichage du produit * @Param Request * @param modèle * @param LoginUserID * / void showProductSByPage (requette httpservletRequest, modèle modèle, int loginUserErid);
La méthode suivante pour implémenter la classe consiste à appeler la couche DAO et à accepter les paramètres passés par le contrôleur pour effectuer le traitement de la logique métier. La demande est utilisée pour obtenir les paramètres transmis par le frontal, et le modèle est utilisé pour renvoyer les résultats de traitement sur la page JSP.
@Override public void showProductSByPage (request httpServleRequest, modèle modèle, int loginUserID) {String pageNow = request.getParameter ("pageNow"); Page Page = NULL; List <ProductWithBlobs> Products = new ArrayList <ProductWithBlobs> (); int totalCount = (int) productDao.getProductScount (LoginUserID); if (pagenow! = null) {page = new Page (totalCount, Integer.ParseInt (Pagenow)); allProducts = this.productdao.selectProductSByPage (page.getStartpos (), page.getPageSize (), LoginUserErid); } else {page = new Page (totalCount, 1); allProducts = this.productdao.selectProductSByPage (page.getStartpos (), page.getPageSize (), LoginUserErid); } Model.AddAttribute ("Products", Products); Model.AddAttribute ("page", page); }Vient ensuite l'écriture du contrôleur. Lorsque l'utilisateur doit passer à la page de ce vrai produit, il doit passer par la méthode correspondante du contrôleur. Ce processus de traitement consiste à appeler la méthode de la couche commerciale à terminer, puis à renvoyer le résultat à l'affichage dynamique JSP. Le serveur génère la page et le transmet au client (navigateur) pour la réalité. Il s'agit d'un processus MVC.
/ ** * Initialisez la page JSP de la liste "Mes produits", avec fonction de pagination * * @param request * @param modèle * @return * / @requestmapping (value = "map path", méthode = requestMethod.get) shithor showmyProduct (httpsservletReQuest request, modèle modèle) {// get LoginUser dans la session User loginUser = (user) request.getSession (). getAttribute ("LoginUser"); // Déterminez si la session n'est pas valide if (LoginUser == null || "" .equals (Loginuser)) {return "redirect: /"; } int loginUserID = loginuser.getUserId (); // Le ProductService est ici un objet de l'interface IproductService injectée this.productService.showProductsByPage (demande, modèle, loginUserErid); Renvoyez "JSP Path pour sauter"; }Je n'écrirai pas la partie d'acceptation de la page JSP. Tout le monde est le même, c'est-à-dire qu'ils combinent JSTL et EL pour l'écrire. (J'ai également rendu un jugement lors de la boucle. Si les paramètres acceptés sont vides, il n'y a pas de produit pour la sortie. Ce n'est que lorsque les paramètres acceptés ne sont pas vides, la sortie sera bouclée.
<!-- Paging function start --> <div align="center"> <font size="2">Total${page.totalPageCount} page</font> <font size="2">Page${page.pageNow}</font> <a href="myProductPage?pageNow=1" rel="external nofollow" rel="external nofollow" > Home </a> <C: Choose> <C: quand test = "$ {page.pagenow - 1> 0}"> <a href = "myProductPage? Pagenow = $ {page.pagenow - 1}" rel = "external nofollow"> page précédente </a> </ c: quand> <c: when test = "$ {page.pagenow - 1 <= 0 <c: whenTe href = "myProductPage? pagenow = 1" rel = "external nofollow" rel = "external nofollow"> page précédente </a> </ c: when> </ c: choisis> <c: choisis> <c: when test = "$ {page.totalpageCount == 0}"> <a test = "$ {page.totalpageCount == 0}"> <a test = "$ {page.totalpageCount == 0}"> <a test = " href = "myProductPage? pagenow = $ {page.pagenow}" rel = "external nofollow" rel = "external nofollow"> page suivante </a> </ c: when> <c: when test = "$ {page.pagenow + 1 <page.totalpageCount}"> <a href = "myProductPage? pagenow = $ {page.pagenow + 1}" rel = "external nofollow"> page suivante </a> </c: when> <c: when test = "$ {page.pagenow + 1> = page.totalpageCount}"> <a href = "myProductPage? pageNow = $ {page.totalpageCount}" rel = "external nofollow" rel = "external nofollow"> Page suivante </a> </ c: when> </ c: choisis> <c: choisis> <c: when test = "$ {page.totalpageCount == 0}"> <a href = "myProductPage? pagenow = $ {page.pagenow}" rel = "external nofollow" rel = "external nofollow"> dernière page </a> </ c: when> <c: sinon> <a href = "myproductpage? pagenow = $ {page.totalpageCount}" rel = "external =" externetal " nofollow "> dernière page </a> </ c: sinon> </ c: choisir> </div> <! - Fonction de pagination fin ->2. Pagination de requête
En ce qui concerne la pagination de requête, le processus est à peu près le même, sauf que le troisième paramètre (ce qui précède est LoginUserID) doit accepter les paramètres d'entrée de l'utilisateur. De cette façon, nous devons accepter le paramètre d'entrée de l'utilisateur dans le contrôleur (le <poing> dans la page est passé dans la méthode GET), puis l'ajouter à la session pour compléter la pagination de requête (ici, en raison de l'hyperlien dans la "page suivante", différentes pages JSP sont utilisées pour gérer le code de pagination et de recherche. La méthode complète dans une page JSP n'a pas encore été trouvée. séparément et le charger avec une balise <clut> à la page JSP requise, afin que le code puisse être évité):
Voici le code du contrôleur comme référence:
/ ** * Interrogez le produit par nom de produit * @param demande * @param modèle * @return * / @requestmapping (value = "Map Address", méthode = requestMethod.get) public String SearchForProducts (httSservletRequest request, modèle modèle) {httpSession session = request.getSession (); String param = request.getParameter ("param"); String condition = (String) session.getAttribute ("Condition"); // Déterminez d'abord si la condition en session est vide if (condition == null) {condition = new String (); session.setAttribute ("condition", condition); // Si la condition de session est vide, déterminez si le paramètre passé est vide. S'il est vide, passez à la page de résultat de la recherche if (param == null || "" .equals (param)) {return "private / spatial / productSearchResult"; }} // Si la session n'est pas vide et que la condition de recherche entrante param n'est pas vide, alors affectez Param à la condition si (param! = Null &&! ("". Equals (param))) {condition = param; session.setAttribute ("condition", condition); } // Utilisez la valeur d'attribut de condition dans la session comme condition de requête this.productService.showsearchEdProductsByPage (demande, modèle, condition); retourner "page sautée"; }Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.