Фильтрация коллекции со смещением в Grails

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

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], com.publidirecta.PersonalController$_show_closure2@a6bdb0] 
Possible solutions: findAll(), findAll(), findAll(groovy.lang.Closure), findAll(groovy.lang.Closure), find(), find()`  

Это то, почему для достижения какой-то разбивки на страницы это почему, или мне придется делать это вручную?


person user1485182    schedule 09.04.2013    source источник


Ответы (1)


Я предполагаю, что у вас есть две вещи: Grails и Groovy.
Book.findAll(Map queryParams, Closure whereCriteria) - это средство поиска в базе данных, это вещь Grails, и вы можете передать в нее максимальный параметр.
Но в trabajos.findAll({it.estado.equals( "Pago")}) вы пытаетесь найти в списке . Это отличная вещь. Подробнее см. здесь и здесь

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

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()]
person Mr. Cat    schedule 09.04.2013
comment
Хорошо, я вижу ошибку. Теперь я попытался добиться этого внутри закрытия с помощью maxResults (3) и firstResult (0), но это также не работает. - person user1485182; 09.04.2013