web-dev-qa-db-ja.com

Grailsインデックスページのベストプラクティス

Grailsアプリでインデックスページのモデルにデータを入力する正しい方法は何ですか?デフォルトではIndexControllerはありませんが、これとそのリストをモデルに取り込むための他のメカニズムはありますか?

27
danb

これが正しい方法であるとは言いませんが、それは物事を始めるための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 ]
    }
}
36
Ed.T

上記の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ファイルが不要になるため、削除しました。

21
William Pietri

良い答え:インデックスページのモデルにデータを入力する必要がある場合は、ストレートindex.gspの使用からインデックスコントローラーに変更するときが来ました。

邪悪な答え:コントローラーが「*」であるフィルターを作成すると、静的ページに対しても実行されます。

4
Robert Fischer

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:"/")
    }
}
0
alk