2013-04-09 2 views
1

J'essaye de filtrer une collection dans des grails avec findAll ainsi je reçois seulement les instances avec une certaine valeur dans son champ "estado".
J'ai quelque chose comme ceci:Filtrer une collection avec décalage dans les grails

trabajos.findAll({it.estado.equals("Pago")}) 

Le problème est que je ne sais pas comment paginate la collection retournée.
Je pris un coup d'œil à la documentation de Grails et trouvé ce

Book.findAll(Map queryParams, Closure whereCriteria) 

mais quand je l'essaye

trabajos.findAll([offset: 0], {it.estado.equals("Pago")}) 

je suis l'exception suivante

No signature of method: java.util.ArrayList.findAll() is applicable for argument types:  (java.util.LinkedHashMap, com.publidirecta.PersonalController$_show_closure2) values: [[offset:0], [email protected]] 
Possible solutions: findAll(), findAll(), findAll(groovy.lang.Closure), findAll(groovy.lang.Closure), find(), find()` 

Est-ce une raison pour laquelle d'atteindre un certain sorte de pagination ce pourquoi ou devrais-je le faire manuellement?

Répondre

0

Je suppose que vous êtes muss 2 choses: grails et groovy.
Book.findAll(Map queryParams, Closure whereCriteria) - est un chercheur dans la base de données, c'est chose de grails et vous pouvez passer max param dedans.
Mais dans trabajos.findAll({it.estado.equals("Pago")}) vous essayez de trouver dans la liste. C'est une chose groovy. Voir plus de détails here et here

Si vous essayez d'obtenir des objets de base de données, utiliser comme cette

Book.findAll(Map queryParams, Closure whereCriteria).

Si c'est une liste d'objets utilisent quelque chose comme ceci:

def filtered = trabajos.findAll({it.estado.equals("Pago")}) 
def result = filteredList[offset..offset+max < filtered.size() ? offset+max : filtered.size()] 
+0

Ok, je vois l'erreur. Maintenant, j'ai essayé de le réaliser à l'intérieur de la fermeture avec maxResults (3) et firstResult (0), mais ce travail dosent aussi – user1485182

+0

Il shuldn't. Voir la réponse éditée. –

Questions connexes