2013-04-09 1 views
1

Я пытаюсь отфильтровать коллекцию в grails с findAll, поэтому я получаю экземпляры с определенным значением в его поле «estado».
У меня есть что-то вроде этого:Фильтрация коллекции со смещением в grails

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

Проблема в том, я не знаю, как постраничной возвращенную коллекцию.
Я посмотрел на Grails документации и нашел этот

Book.findAll(Map queryParams, Closure whereCriteria) 

, но когда я пытаюсь это

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

Я получаю следующее исключение

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()` 

Является ли это почему для достижения некоторых что-то вроде этого, или я должен сделать это вручную?

ответ

0

Я думаю, вы muss 2 вещи: grails и groovy.
Book.findAll(Map queryParams, Closure whereCriteria) - это искатель в базе данных, это функция grails, и вы можете передать max param в нее.
Но в trabajos.findAll({it.estado.equals("Pago")}) вы пытаетесь найти в списке. Это потрясающая штука. Подробное описание here и here

Если вы пытаетесь получить объекты из базы данных, использовать как этот

Book.findAll(Map queryParams, Closure whereCriteria).

Если это список объектов, использовать что-то вроде этого:

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

Ok, я вижу ошибку. Теперь я попытался добиться этого в закрытии с maxResults (3) и firstResult (0), но это тоже работа с дозатором – user1485182

+0

Это не так. См. Отредактированный ответ. –