2009-08-04 5 views
1

Je commence juste à utiliser les grails, et j'ai un problème.Je n'arrive pas à faire en sorte que la méthode "rendu" du contrôleur de gravier fonctionne avec un modèle explicite.

J'ai un pour les projets page d'accueil « contrôleur » et « vue » (il n'y a pas de modèle pour la page d'accueil)

J'ai appelé la vue « index.gsp », et le mettre dans une vue du répertoire/Cependant, peu importe ce que je fais, grails essaie de lire la page "home.gsp" (et ensuite home.jsp), bien que j'aie explicitement spécifié l'index avec l'attribut "template" dans l'appel de rendu .

class HomeController { 
    String someparameter = "xyzzy" 
    def index = { 
     render(view:"home", template:"index") // I also tried "index.gsp" and "home/index.gsp" 
    } 
} 

Je pense que je peux utiliser le « modèle » attribut mal, parce que je ne vois que cela utilisé dans les exemples pour une vue moins-rendu de modèle. Cependant, la documentation ne donne aucune limitation de ce type.

Existe-t-il un moyen de spécifier explicitement le nom d'un modèle? J'ai juste cédé et l'ai renommé "home.gsp", mais j'aimerais comprendre ce qui ne va pas.

(La page d'accueil dans cette application n'a pas de « modèle ». Grails utilisera le contrôleur a le modèle. Dans cet exemple, vous pouvez accéder à « someparameter » dans le modèle gsp comme $ {someparameter}.)

Répondre

8

Je pense que vous pourriez mal comprendre ce qu'est un Grails template. Pensez à un modèle en tant que fragment réutilisable . Un modèle est un GSP qui commence par un trait de soulignement tel que _menu.gsp que vous souhaitez généralement afficher à partir d'un autre GSP avec l'étiquette a comme <g:render template="menu"/>.

Cela n'a aucun sens de rendre à la fois une vue et un modèle en même temps. Ils sont mutuellement exclusifs à ce stade.

Cherchez-vous à implémenter une mise en page? Si oui, see the docs ou the grails.org explaination.

Fondamentalement, votre point de vue que vous auriez une balise <meta name="layout" content="main"> dans la balise <head/> de votre point de vue - ce qui indique que la vue mailler ainsi que la mise en page main situé dans grails-app/views/layouts/main.gsp

+0

Merci! Je me suis rendu compte moi-même quand je relisais "le guide définitif des grails" Il s'avère que si je veux avoir un ".gsp" nommé "index.gsp" sous un nom de famille, il trouvera la "maison" répertoire automatiquement basé sur le nom du contrôleur, et tout ce que je dois faire est de dire rendre (vue: "index") vue ne fait pas vraiment référence à un "vue", il se réfère à un fichier .gsp sous le répertoire de vue nommé le même que le contrôleur. Parfois, cette programmation «conventionnelle» peut bousiller un noob habitué à d'autres termes. –

+0

Et d'ailleurs, vous n'avez même pas à rendre explicitement la vue, car Grails cherchera une vue avec le même nom que l'action si vous n'en spécifiez pas. –

Questions connexes