2008-10-13 2 views
27

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

ответ

36

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

Я думаю, что UrlMappings, вероятно, следует прочитать ` "/"{контроллер: "цитата"}`. Это не сработало для меня, пока я не изменил значение «=» на «:». – 2012-07-30 17:50:30

+0

`static defaultAction =" random "` - вместо перенаправления из действия индекса вы можете добавить статическое поле defaultAction к контроллеру с желаемым именем действия в качестве значения. – topr 2013-02-23 00:33:28

4

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

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

19

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

После некоторых экспериментов и некоторые рыться в сети, я закончил с этим в UrlMappings.groovy:

"/"(controller: 'home', action: 'index') 

Мой HomeController выглядит следующим образом:

class HomeController { 

    def index = { 
    def quotes = = latest(Quote.list(), 5) 
    ["quotes": quotes, "totalQuotes": Quote.count()] 
    } 

} 

И в , у меня есть index.gsp файл. Это делает ненужным файл index.gsp, поэтому я удалил его.

0

В Граалей 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:"/") 
    } 
}