Ошибка Paginate - динамические леса Grails - PullRequest
0 голосов
/ 10 февраля 2011

В поисках решения проблемы двухдоменных классов в одном представлении я наткнулся на учебник по scaffolding для grails, где я увидел это:

class BookController {
   def scaffold = Book
   // overrides scaffolded action to return both authors and books
   def list = {
     [ "books" : Book.list(), "authors": Author.list() ]
     }
 } 

А под ним написано:

All of this is what is known as "dynamic scaffolding" where the CRUD interface is generated dynamically at runtime.

Я совершенно новичок в концепции строительных лесов, и есть кое-что, чего я здесь не понимаю. Я ожидаю, что list.gsp генерируется динамически на основе возвращаемых параметров контроллера, что позволяет мне иметь оба списка в одном представлении. Я не знаю, возможно ли это, просто я ожидаю, что это произойдет здесь волшебным образом. Поэтому, пожалуйста, поправьте меня, если я ошибаюсь.

Если это так, то в моем приложении что-то идет не так, и я получаю:

 org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Tag [paginate] is missing required attribute [total] at /customer/list:45

Так что это что-то в представлении, которого у меня нет, потому что я ожидаю, что это будет подмостей. Может быть, ошибка вызвана тем, что я использую шаблоны по умолчанию? Должен ли я создать новый шаблон специально для моих нужд? Кроме того, есть ли какая-то статья на жизненном цикле Грааля, чтобы я мог видеть, что проходит, когда?

Спасибо всем за помощь, аль

Ответы [ 3 ]

2 голосов
/ 11 февраля 2011

Я полагаю, вы неправильно поняли этот раздел документации Grails.По умолчанию леса предоставляют индекс, список, шоу, редактирование, сохранение, обновление и удаление действий.Однако, когда в документации Grails говорится, что вы можете вернуть как Книги, так и Авторы, это не означает, что это автоматически создаст новую основу для ОБА книг и авторов.Это говорит о том, что если вы хотите пойти и создать новое представление списка, то есть grails-app/views/book/list.gsp, вы можете сделать так, чтобы приложение использовало ваше закрытие list и представление вместо скаффолдингового.

Теперь вы столкнулись с небольшим количеством мелочей Грааля, которые я никогда раньше не рассматривал.Что если вы переопределите закрытие лесов без указания нового представления, Grails выдаст 404 или будет использовать представление лесов?Похоже, что он использует представление лесов.Таким образом, представление списка по умолчанию использует разбиение на страницы и ожидает увидеть переменную xxxInstanceListTotal, которую тег paginate затем использует для своего атрибута total.Поскольку значение не указано, paginate выдает исключение, которое можно увидеть там.

Строительные леса - довольно базовая функциональность, они недостаточно умны, чтобы показывать объединенный список книг и авторов.

1 голос
/ 11 февраля 2011

Если вы используете леса в классе Book, он будет содержать только список лесов Book s.

. Вы можете выполнить команду grails install-templates, чтобы узнать, что делает леса.После этого вы можете безопасно удалить src / template / scaffolding.

В вашем случае шаблон list.gsp ожидает две переменные: bookInstanceList и bookInstanceTotal.bookInstanceTotal - это значение обязательного параметра total для тега [paginate][2], поэтому вы получаете указанную ошибку.

0 голосов
/ 13 марта 2014

Интересно, что при переопределении действия index (), чтобы я мог отсортировать результат по-разному, я обнаружил, что в Grails 2.3.7 значения по умолчанию теперь равны bookInstanceList и bookInstance<b>Count</b>.

Документация не изменилась с bookInstance<b>Total</b>!

Эти имена дополнительно определяются следующим параметром в grails-app/conf/Config.groovy:

grails.scaffolding.templates.domainSuffix = 'Instance'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...