grailsアプリでインデックスページのモデルを設定する正しい方法は何ですか? デフォルトでは IndexController はありません。これとあれのリストをモデルに取得するための他のメカニズムはありますか?
4 に答える
これが正しい方法だとは言いませんが、物事を始めるための 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 ]
}
}
上記の Ed T の例を動作させることができませんでした。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 の使用からインデックス コントローラーに変更する時期です。
悪い答え:コントローラーが '*' であるフィルターを作成すると、静的ページに対しても実行されます。
追加するだけの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:"/")
}
}