2010-10-30 6 views
3

J'essaie de paginer à travers 2 tables sur 1 gsp en utilisant 2 g: paginate tags. Si vous appuyez sur le bouton de pagination sur la table 1, les deux tables sont paginées, car les deux étiquettes paginées utilisent les mêmes paramètres 'max' et 'offset'. Comment puis-je paginer à travers une table sans paginer l'autre table?Grailles pagination de plusieurs tables

Merci d'avance.

Répondre

1

Vous pouvez également utiliser le plugin remote-pagination, qui fait exactement le même travail. À votre santé.

3

Voici un exemple utilisant des paramètres supplémentaires sur la balise paginate. Foo et Bar sont deux classes de domaine avec une propriété String 'nom'. J'ai créé 50 de chaque dans Bootstrap.groovy.

PageController.groovy:

class PageController { 

    def index = { 
    if (params.paginate == 'Foo') { 
     def fooPagination = [max: params.max, offset: params.offset] 
     session.fooPagination = fooPagination 
    } else if (params.paginate == 'Bar') { 
     def barPagination = [max: params.max, offset: params.offset] 
     session.barPagination = barPagination 
    } 
    def barList = Bar.list(session.barPagination ?: [max: 10, offset: 0]) 
    def fooList = Foo.list(session.fooPagination ?: [max: 10, offset: 0]) 
    //This is to stop the paginate using params.offset/max to calculate current step and use the offset/max attributes instead  
    params.offset = null 
    params.max = null 
    [fooList: fooList, totalFoos: Foo.count(), totalBars: Bar.count(), barList: barList] 
    } 
} 

index.gsp:

<html> 
<head> 
    <title>Multi Pagination Example</title> 

    <meta name="layout" content="main"/> 
    <style type="text/css" media="screen"> 

    h2 { 
    margin-top: 15px; 
    margin-bottom: 15px; 
    font-size: 1.2em; 
    } 
    </style> 

</head> 
<body> 
<table> 
    <tr> 
    <td> 
     <h2>Foo</h2> 
     <table> 
     <tr> 
      <th>Name</th> 
     </tr> 
     <g:each in="${fooList}"> 
      <tr><td>${it.name}</td></tr> 
     </g:each> 
     <tr> 
      <td class="paginateButtons"> 
      <g:paginate total="${totalFoos}" max="10" offset="${session.fooPagination?.offset}" params="${[paginate:'Foo']}"/></td> 
     </tr> 
     </table> 
    </td> 
    <td> 
     <h2>Bar</h2> 
     <table> 
     <tr> 
      <th>Name</th> 
     </tr> 
     <g:each in="${barList}"> 
      <tr><td>${it.name}</td></tr> 
     </g:each> 
     <tr> 
      <td class="paginateButtons"> 
      <g:paginate total="${totalBars}" max="10" offset="${session.barPagination?.offset}" params="${[paginate:'Bar']}"/></td> 
     </tr> 
     </table> 
    </td> 
    </tr> 
</table> 

</body> 
</html> 

acclamations

Lee

+0

Merci pour votre réponse. Je suis un peu nouveau pour les grails et je n'ai toujours pas de choses à faire, ni par l'action ni par le ça. Avez-vous une chance de me donner plus de détails? – emiles

+0

@emiles J'ai mis à jour ma réponse avec un exemple – leebutts

+0

J'ai suivi votre exemple de près, mais je ne vois pas le paramètre 'pagination' dans mon action de contrôleur. Y a-t-il une raison pour laquelle l'attribut 'params' n'inclurait pas de valeur personnalisée? Je devrais également mentionner que je suis relativement nouveau à l'univers de grails ... – toddk

0

La pagination de Grails est complètement inutile pour la pagination multiple dans une page bceause vous ne pouvez pas passer dans l'attribut max et offset personnalisé. Voici la raison pour laquelle

def offset = params.int('offset') ?: 0 
def max = params.int('max') 

Et documentation vous indique « max (en option) -. Le nombre d'enregistrements à afficher par page (par défaut 10) Utilisé uniquement si params.max est vide » QUOI? Quel est le sens de créer quelque chose que je ne peux pas contrôler. Bon moyen de programmation - Laissez-moi entrer mes variables ou donnez-moi des options, puis utilisez vos valeurs par défaut!

+0

vous pouvez toujours le contrôler - l'écraser avec un params.max = anyint – aldrin