2013-10-08 2 views
1

Я использовал 1.3.7 before и конструктор для PagedResultList в том, что конструктор PagedResultList принимал список. Так что мой код былПроблема с PagedResultList в grails 2

def result = [...] 

def pagedResult = new PagedResultList(result) 

теперь конструктор изменен

PagedResultList(GrailsHibernateTemplate template, Criteria crit) 

Можете ли вы помочь мне преобразовать список результатов в PagedResultList в 2.x?

+0

Я не думаю, что 'PagedResultList' когда-либо планировалось построить непосредственно вне методов GORM. Единственное, что 'PagedResultList' дает вам по простому списку, это свойство' totalCount', которое 'new PagedResultList (result)' не будет установлено в любом случае. Или вы ранее устанавливали 'totalCount' после строительства? –

+0

Да. Я устанавливал totalCount после создания def pagedResult = new PagedResultList (результат) pagedResult.totalCount = distinctCount [0] – user1298426

ответ

4

PagedResultList похоже, было изменено в Grails 2, чтобы рассчитать totalCount лениво при первом доступе, а не рассчитывать счет, если это может не потребоваться в конечном счете. Но это 4 строки Groovy, чтобы написать свои собственные дроп-ин замены, благодаря Delegate AST transformation:

class MyPagedResultList { 
    @Delegate List theList 
    int totalCount 
} 

// create one using new MyPagedResultList(theList:result, totalCount:total) 

Что преобразование делает автоматически добавить все методы типа делегата (в данном случае List) к цели тип (в данном случае MyPagedResultList), реализуемый путем делегирования объекту делегирования. Таким образом, MyPagedResultList реализует интерфейс List без необходимости вручную выписывать все соответствующие методы.

+0

Работает так, как ожидалось. Не могли бы вы объяснить, почему вы использовали аннотацию делегата? – user1298426

+0

@ user1298426 Я добавил немного более подробную информацию и ссылку на страницу документации Groovy. –

Смежные вопросы