Лучшие практики для страницы индекса Grails - PullRequest
27 голосов
/ 14 октября 2008

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

Ответы [ 4 ]

36 голосов
/ 15 октября 2008

Я не буду утверждать, что это правильный путь, но это один из способов начать все сначала. Не требуется много, чтобы иметь контроллер по умолчанию. Добавьте отображение в 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 ]
    }
}
21 голосов
/ 06 июля 2009

Я не могу заставить приведенный выше пример Эда Т работать. Возможно, Grails изменился с тех пор?

После некоторых экспериментов и порывов в сети я закончил с этим в 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 в представлениях, поэтому я удалил его.

4 голосов
/ 14 октября 2008

Хороший ответ: Если вам нужно заполнить модель для страницы индекса, пришло время перейти от использования прямого index.gsp к контроллеру индекса.

Злой ответ: Если вы создадите фильтр с контроллером '*', он будет выполнен даже для статических страниц.

0 голосов
/ 03 февраля 2011

В граале 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:"/")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...