Grails "render" rend le template
Dans mon Graal contrôleur je suis de répondre à un appel AJAX et l'utilisation de render
renvoyer le texte:
def ajaxRandomPersonName = {
def person = get a random person ...
render "Name: ${person.name}"
}
Le problème est que render
rend l'ensemble du modèle. Donc au lieu de simplement rendu "Nom: John" elle rend toutes les icônes, la navigation, etc définis dans le modèle. Comment puis-je obtenir render
juste rendre sans modèle?
Je suis à peu près suivant le Chapitre 1 de "Graal dans l'Action" (page 28) à l'aide de Graal 1.1.1.
Suivi:
Retourner false par Rhysyngsun la suggestion n'a pas d'impact. J'ai aussi essayé en définissant le modèle à null, mais il reste rend le modèle:
def ajaxRandomPersonName = {
def person = get a random person ...
render (template:null, text:"Name: ${person.name}")
}
render
a son cœur se pencha sur son rendu par le modèle, peu importe ce que je fais.
Suivi 2: En parallèle de la discussion sur graal-user mailing liste.
Suivi 3: Exemple de code:
Je l'ai couplé ma code le strict minimum et il présente encore des indésirables modèle de rendu.
contrôleurs/PersonController.groovy:
class PersonController {
def index = { }
def home = { [message:"Hello"] }
def ajaxTest = {
println "ajaxTest called"
render text: "ajax message"
}
}
vues/personne/home.spg (voir page pour la maison de la méthode)
<html>
<head>
<title>Home View</title>
<g:javascript library="prototype" />
</head>
<body>
<p>
<g:remoteLink action="ajaxTest" update="test1">ajax call</g:remoteLink>
</p>
<p>Message = ${message}</p>
<p id="test1">Blank</p>
</body>
</html>
views/layouts/personne.spg (modèle de mise en page pour personne contrôleur)
<html>
<head>
<title>Test App - <g:layoutTitle/></title>
<g:layoutHead/>
</head>
<body>
<h1>Test App</h1>
<g:layoutBody/>
</body>
</html>
Je avoir accès à la personne du contrôleur à la vue d'accueil:
http://localhost:8080/test/person/home
la page s'affiche comme:
Application De Test
appel ajax (lien hypertexte)
Message = Bonjour
Vide
"Test App" est à partir du modèle. Lorsque je clique sur "appel ajax" il fait un appel asynchrone à PersonController de ajaxTest méthode (vérifié avec println). Tous les ajaxTest n'est println et de rendu de texte statique. Ce qui en résulte dans le suivant:
Test App
ajax call
Message = Hello
Test App
ajax message
Remarque que le modèle est rendue dans un délai de "test1" <p>
qui entraîne le deuxième "Application de Test".
Je suis en cours d'exécution Graal 1.1.1. Des idées? Le code semble simple. J'ai téléchargé le Graal de la source et la regarda RenderDynamicMethod.java. Il n'est pas n'importe quel modèle de rendu, à moins que le modèle est dans la liste d'arguments, il ne l'est pas. Donc ma seule conjecture est quelque chose de vapeur est rendu à nouveau le modèle.
source d'informationauteur Steve Kuo | 2009-09-23
Vous devez vous connecter pour publier un commentaire.
Résolu: Ajout de contentType résultats dans le modèle n'étant pas rendus:
Faire de votre côté client javascript code de gérer un JSON répondre et de rendre votre réponse:
Vous avez peut-être brûlé par la " mise en page par convention, la fonction dans le Graal. Si votre mise en page le nom correspond au nom du contrôleur de préfixe, par exemple, Graal appliquera la disposition de chaque opinion, géré par le contrôleur. Malheureusement, il s'applique même à du texte et des modèles. Il y a actuellement quelques JIRAs connecté au sujet de ce (voir http://jira.grails.org/browse/GRAILS-7624 par exemple).
Je me suis brûlé par la présente aujourd'hui. J'ai résolu il suffit de renommer ma mise en page gsp telle qu'il ne correspond pas à n'importe quel contrôleur nom. Ma mise en page a été initialement nommé " vitrine.spg " et j'ai un contrôleur nommé StorefrontController. J'ai renommé la mise en page au public.spg.
Nous avons constaté que explicitement le retour de falsification de l'action correctifs.
Je crois faisant, rendre foo que JSON retourne false implicitement.