2010-11-25 6 views
8

Ich bin neu in Grails, und ich will ein Verfahren von einem bestimmten Controller in meinem index.gsp verwendenGrails: Verwenden Sie Controller von index.gsp

In Index.gsp habe ich versucht

<g:each in="${MyController.myList}" var="c"> 
    <p>${c.name}</p> 
</g:each> 

aber Es besagt, dass die Eigenschaft nicht verfügbar ist.

MyController enthält eine Eigenschaft wie:

def myList = { 
     return [My.findAll() ] 
    } 

Was mache ich falsch? Gibt es ein gutes Tutorial über die Kommunikation zwischen den Grals-Teilen?

Oder gibt es eine bessere Möglichkeit, Informationen über Gsp gedruckt zu bekommen?

Dank

+0

Ich denke, es wäre sehr hilfreich, wenn Sie mir sagen können, wo ich ein Best Practice Grails/Groovy Projekt finden kann. – elCapitano

Antwort

18

Im Allgemeinen, wenn die Model-View-Controller Muster verwenden, möchten Sie nicht Ihre Ansicht etwas über Controller wissen. Es ist Aufgabe des Controllers, das Modell der Ansicht zu geben. Anstatt also index.gsp direkt auf die Anfrage antworten zu lassen, sollte ein Controller sie behandeln. Der Controller kann dann alle erforderlichen Domänenobjekte (das Modell) abrufen und sie an die Ansicht weiterleiten. Beispiel:

// UrlMappings.groovy 
class UrlMappings { 
    static mappings = { 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(controller:"index") // instead of linking the root to (view:"/index") 
     "500"(view:'/error') 
    } 
} 

// IndexController.groovy 
class IndexController { 
    def index() { // index is the default action for any controller 
     [myDomainObjList: My.findAll()] // the model available to the view 
    } 
} 

// index.gsp 
<g:each in="${myDomainObjList}" var="c"> 
    <p>${c.name}</p> 
</g:each> 
+1

Das ist viel zu ausführlich. Wenn Sie index.gsp von der Aktion 'index' rendern, müssen Sie nicht das Attribut 'view' und das Attribut 'model' angeben. Geben Sie einfach die Modellzuordnung zurück. –

+0

Ok, ich habe den Controller aktualisiert, damit die Ansicht per Konvention gewählt werden kann, anstatt explizit Rendering aufzurufen. – ataylor

+0

Sie müssen also für jede .gsp-Site einen Controller verwenden, wenn Sie Modellobjekte erhalten wollen? – elCapitano

Verwandte Themen