Dans mon contrôleur Grails je réponds à un appel AJAX et en utilisant render
pour renvoyer le texte:Grails « Render » rend le modèle
def ajaxRandomPersonName = {
def person = get a random person ...
render "Name: ${person.name}"
}
Le problème est que le modèle render
rend tout. Ainsi, au lieu de simplement rendre "Nom: Jean", il rend toutes les icônes, navigation, etc. définies dans le modèle. Comment puis-je obtenir render
simplement rendre sans le modèle?
Je suis en train de suivre le chapitre 1 de "Grails in Action" (page 28) en utilisant Grails 1.1.1.
Suivi: Le retour de false par suggestion de Rhysyngsun n'a aucun impact. J'ai aussi essayé de mettre le modèle à null, mais il rend encore le modèle:
def ajaxRandomPersonName = {
def person = get a random person ...
render (template:null, text:"Name: ${person.name}")
}
render
a son cœur courbé sur le rendu à travers le modèle, peu importe ce que je fais.
Suivi 2: Parallel discussion sur la liste de diffusion des utilisateurs de grails.
le suivi 3: Exemple de code: J'apparié vers le bas mon code le strict minimum et il présente encore le rendu du modèle non désiré.
contrôleurs/PersonController.groovy:
class PersonController {
def index = { }
def home = { [message:"Hello"] }
def ajaxTest = {
println "ajaxTest called"
render text: "ajax message"
}
}
vues/personne/home.gsp (page de vue pour la méthode de la maison)
<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>
vues/layouts/person.gsp (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 contrôleur d'accès de la personne en vue de la maison: http://localhost:8080/test/person/home
la page rend comme: Test App appel ajax (hyperlien) Message = Bonjour Blank
"Test App" est à partir du modèle. Lorsque je clique sur "appel ajax", il fait un appel asynchrone à la méthode ajaxTest de PersonController (vérifiée avec println). Tout ajaxTest fait est println et rend le texte statique. Ce qui en résulte dans les domaines suivants:
Test App
ajax call
Message = Hello
Test App
ajax message
Notez que le modèle est rendu dans les « test1 » <p>
qui se traduit par la seconde « Test App ».
Je cours Grails 1.1.1. Des idées? Le code semble simple. J'ai téléchargé la source de Grails et j'ai regardé RenderDynamicMethod.java. Il ne fait pas de rendu de gabarit sauf si template est dans la liste des arguments, ce qui n'est pas le cas. Donc, ma seule conjecture est que quelque chose en haut de la page rend le modèle à nouveau.
comment avez-vous su cela? –
Oui, veuillez préciser où vous avez trouvé cette réponse. Sur une note de côté, c'est une honte absolue que le chapitre 1, qui aurait dû me prendre 30 minutes, m'a pris des heures pour terminer. Et, je suis complètement déçu par mon premier coup au Grails –