Wie befüllen Sie das Modell für die Indexseite in einer Grails-App? Es gibt standardmäßig keinen IndexController, gibt es einen anderen Mechanismus, um Listen von diesem und jenem in das Modell zu bekommen?Best Practices für die Grails-Indexseite
Antwort
Ich werde nicht behaupten, dass dies der richtige Weg ist, aber es ist eine Möglichkeit, Dinge zu starten. Es braucht nicht viel, um einen Controller als Standard zu haben. Fügen Sie eine Zuordnung zu UrlMappings.groovy:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"500"(view:'/error')
"/"
{
controller = "quote"
}
}
}
Dann einen Index Aktion auf die nun Standard-Controller hinzufügen:
class QuoteController {
def index = {
...
}
}
Wenn das, was Sie wollen, ist laden bereits Teil einer anderen Aktion einfach umleiten:
def index = {
redirect(action: random)
}
Oder wirklich einige Wiederverwendung geht, setzt die Logik in einem Dienst zu erhalten:
class QuoteController {
def quoteService
def index = {
redirect(action: random)
}
def random = {
def randomQuote = quoteService.getRandomQuote()
[ quote : randomQuote ]
}
}
Die gute Antwort: Wenn Sie ein Modell für die Indexseite füllen müssen, ist es an der Zeit, von einem geraden index.gsp zu einem Index-Controller zu wechseln.
Die böse Antwort: Wenn Sie einen Filter erstellen, dessen Controller '*' ist, wird er auch für statische Seiten ausgeführt.
Ich konnte Ed Ts Beispiel oben nicht zum Arbeiten bekommen. Vielleicht hat sich Grails seitdem verändert?
Nach einigen Experimenten und einige auf dem Netz wühlen, landete ich in UrlMappings.groovy
mit auf den Punkt:
"/"(controller: 'home', action: 'index')
My Homecontroller wie folgt aussieht:
class HomeController {
def index = {
def quotes = = latest(Quote.list(), 5)
["quotes": quotes, "totalQuotes": Quote.count()]
}
}
Und in , ich habe eine index.gsp
Datei. Das macht die index.gsp
Datei in Ansichten unnötig, also habe ich es entfernt.
In Grails 1.3.6 für gerade hinzufügen
"/index.gsp"(uri:"/")
zu UrlMappings.groovy funktionierte gut für mich. Dies hat den gleichen Effekt wie das Hinzufügen eines neuen Controllers und Zuordnungen wie zuvor beschrieben.
Unten ist mein komplettes UrlMappings.groovy:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
"/"(view:"/index")
"500"(view:'/error')
"/index.gsp"(uri:"/")
}
}
Funktioniert die Umleitung mit uri in UrlMappings? Ich habe es versucht (für einen etwas anderen Anwendungsfall), und es nicht. Es ist ein Fehler aufgetreten, dass der Controller null war. Ich musste auf die Weiterleitung von einem Controller zurückgreifen. – mcv
Ich denke, die urlMappings wahrscheinlich gelesen habe ' "/"{Controller: "quote"}'. Es hat nicht funktioniert, bis ich das "=" in ein ":" geändert habe. –
'static defaultAction =" random "' - anstelle der Weiterleitung von der Indexaktion können Sie das defaultAction statische Feld zum Controller mit dem gewünschten Aktionsnamen als Wert hinzufügen. – topr