Подтвердить что ты не робот

Лучшие практики для страницы индекса grails

Каков правильный способ заполнения модели для индексной страницы в приложении grails? По умолчанию не существует IndexController, есть ли какой-то другой механизм для получения списков этого и того же в модели?

4b9b3361

Ответ 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:"/")
    }
}