Grailsアプリでインデックスページのモデルにデータを入力する正しい方法は何ですか?デフォルトではIndexControllerはありませんが、これとそのリストをモデルに取り込むための他のメカニズムはありますか?
これが正しい方法であるとは言いませんが、それは物事を始めるための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 ]
}
}
上記のEdTの例を機能させることができませんでした。おそらく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
ファイルが不要になるため、削除しました。
良い答え:インデックスページのモデルにデータを入力する必要がある場合は、ストレートindex.gspの使用からインデックスコントローラーに変更するときが来ました。
邪悪な答え:コントローラーが「*」であるフィルターを作成すると、静的ページに対しても実行されます。
Grails1.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:"/")
}
}