2010-11-25 24 views
8

je suis nouveau à Grails et je veux utiliser une méthode à partir d'un contrôleur spécifique dans mon index.gspGrails: utiliser le contrôleur de index.gsp

En Index.gsp j'ai essayé

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

mais il dit que la propriété n'est pas disponible.

MyController contient une propriété comme:

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

Qu'est-ce que je fais mal? Y a-t-il un bon tutoriel sur la communication entre les grails-parties?

Ou y a-t-il un meilleur moyen d'obtenir des informations imprimées via gsp?

Merci

+0

Je pense qu'il serait très utile si vous pouvez me dire, où je peux trouver un projet de bonnes pratiques Grails/Groovy. – elCapitano

Répondre

18

En général, lors de l'utilisation du motif Model-View-Controller, vous ne voulez pas votre point de vue de savoir quoi que ce soit sur les contrôleurs. C'est le travail du contrôleur de donner le modèle à la vue. Donc, au lieu d'avoir index.gsp répondre directement à la demande, vous devriez avoir un contrôleur le gérer. Le contrôleur peut alors obtenir tous les objets de domaine nécessaires (le modèle) et les transmettre à la vue. Exemple:

// 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

C'est trop bavard. Si vous exécutez index.gsp à partir de l'action 'index', il n'est pas nécessaire de spécifier l'attribut view et l'attribut model, il suffit de retourner le modèle. –

+0

Ok, j'ai mis à jour le contrôleur pour que la vue soit choisie par convention plutôt que d'appeler explicitement le rendu. – ataylor

+0

Vous devez donc utiliser un contrôleur pour chaque site .gsp si vous voulez obtenir des objets de modèle? – elCapitano