Grails Controller-Methoden

8

Viele der verfügbaren Controller-Methoden (Chain, Forward, Redirect) verwenden eine Map, die beispielsweise folgende Schlüssel enthalten kann:

  • ID
  • params
  • Modell

Ein paar Fragen dazu:

  • Ist 'id' nur ein Alias ​​für einen Anfrageparameter namens 'id'? Mit anderen Worten, gibt es einen Unterschied zwischen:

chain(controller: "member", action: "showProfile", params: [id: memberId])

und

chain(controller: "member", action: "showProfile", id: memberId)

  • Die Methode chain (möglicherweise unter anderem) ermöglicht die Weitergabe eines Modells und / oder Parameter (Karte) von Controller-Aktion A bis B. Was ist praktisch der Unterschied zwischen der Übergabe von Daten von Action A nach B über die Params und Model Maps? Wenn die Daten in der Modellzuordnung übergeben werden, wie kann ich darüber hinaus in der Controller-Aktion B?
  • darauf zugreifen
Dónal 30.08.2009, 19:34
quelle

2 Antworten

9

Alles, was Burt gesagt hat, ist richtig. Der Grund dafür, dass Sie eine Kette (wenn Sie ein Modell haben) oder eine Umleitung (wenn Sie kein Modell beibehalten möchten) haben, liegt daran, dass beide Methoden eine 302-Weiterleitungsantwort an den Browser zurückgeben . Der Browser fragt dann nach der nächsten Seite.

Es hat dann die richtige URL in der Kopfzeile für die resultierende Seite und nicht die URL von der Seite, von der die ursprüngliche Anfrage stammt.

Dieses Muster ist sehr nützlich nach einem POST von Informationen, da es alle Arten von Problemen mit Lesezeichen vermeidet und Informationen erneut einreicht, wenn der Benutzer die Aktualisierung auf der resultierenden Seite trifft.

Beispiel: Wenn Sie ein Buch speichern und die Listenseite rendern möchten, wenn das Buch erfolgreich gespeichert wurde. Wenn Sie in Ihrer Methode nur "controller.list ()" aufrufen, wird dem Benutzer die Liste der Bücher angezeigt, die gerendert werden, aber die URL-Leiste sagt immer noch "... / book / save". Dies ist nicht gut für Lesezeichen oder erneutes Laden. Stattdessen wird die Umleitung / Kette an den Browser gesendet, um sie nach der "... / Buch / Liste" Seite zu fragen, was sie tut. Alle Ihre Variablen (Ihr Modell und andere Flash-Nachrichten) befinden sich im Flash-Bereich, so dass sie für Ihr Modell / Ihre Ansicht weiterhin verfügbar sind und alles in der Welt glücklich ist.

Dieses Muster heißt Post / Redirect / Get .

    
Ted Naleid 31.08.2009 00:02
quelle
7

'id' kommt von UrlMappings-Einträgen wie "/ $ controller / $ action? / $ id?" - Siehe Ссылка zur Verwendung.

Params sind Querystring-Parameter oder Form-Post-Parameter, auf die in Nicht-Grails-Apps über "request.getParameter ('foo')" zugegriffen wird, in Grails jedoch vereinfacht als "params.foo". Der Inhalt der Modellkarte wird in den Anforderungen als Attribute gespeichert, auf die in Nicht-Grails-Apps mit "request.getAttribute ('foo')" zugegriffen wird, die jedoch in Grails als "request.foo" vereinfacht oder typischerweise direkt in GSPs, z. "$ {foo}".

    
Burt Beckwith 30.08.2009 21:53
quelle

Tags und Links