Каков правильный способ заполнения модели для индексной страницы в приложении grails? По умолчанию не существует IndexController, есть ли какой-то другой механизм для получения списков этого и того же в модели?
Лучшие практики для страницы индекса grails
Ответ 1
Я не буду утверждать, что это правильный путь, но это один из способов начать работу. По умолчанию не требуется контроллер. Добавить сопоставление в UrlMappings.groovy:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"500"(view:'/error')
"/"
{
controller = "quote"
}
}
}
Затем добавьте действие индекса для текущего контроллера по умолчанию:
class QuoteController {
def index = {
...
}
}
Если то, что вы хотите загрузить, уже является частью другого действия, просто перенаправляйте:
def index = {
redirect(action: random)
}
Или, чтобы действительно начать повторное использование, поместите логику в службу:
class QuoteController {
def quoteService
def index = {
redirect(action: random)
}
def random = {
def randomQuote = quoteService.getRandomQuote()
[ quote : randomQuote ]
}
}
Ответ 2
Я не мог использовать вышеприведенный пример Ed T. Возможно, с тех пор Граальс изменился?
После некоторых экспериментов и некоторого рывков в сети я закончил с этим в UrlMappings.groovy
:
"/"(controller: 'home', action: 'index')
Мой HomeController выглядит следующим образом:
class HomeController {
def index = {
def quotes = = latest(Quote.list(), 5)
["quotes": quotes, "totalQuotes": Quote.count()]
}
}
И в views/home
у меня есть файл index.gsp
. Это делает ненужным файл index.gsp
в представлениях, поэтому я удалил его.
Ответ 3
Хороший ответ: Если вам нужно заполнить модель для индексной страницы, пришло время перейти от использования прямого index.gsp к контроллеру индекса.
Злой ответ: Если вы создадите фильтр, чей контроллер "*", он будет выполнен даже для статических страниц.
Ответ 4
В grails 1.3.6 для просто добавления
"/index.gsp"(uri:"/")
чтобы UrlMappings.groovy работал отлично для меня. Он имеет тот же эффект, что и добавление нового контроллера и сопоставлений, как описано ранее.
Ниже мой полный UrlMappings.groovy:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/index")
"500"(view:'/error')
"/index.gsp"(uri:"/")
}
}