In meinem Grails Controller ich einen Ajax-Aufruf bin reagiert und mit render
den Text zurück:Grails „render“ macht die Vorlage
def ajaxRandomPersonName = {
def person = get a random person ...
render "Name: ${person.name}"
}
Das Problem ist, dass render
die ganze Vorlage macht. Anstatt also nur "Name: John" zu rendern, werden alle in der Vorlage definierten Symbole, Navigation usw. gerendert. Wie bekomme ich render
nur ohne die Vorlage zu rendern?
Ich folge ziemlich genau Kapitel 1 von "Grails in Action" (Seite 28) mit Grails 1.1.1.
Nachverfolgung: Die Rückgabe von false per Vorschlag von Rhysyngsun hat keine Auswirkungen. Ich habe versucht Einstellung auch die Vorlage auf null, aber es macht immer noch die Vorlage:
def ajaxRandomPersonName = {
def person = get a random person ...
render (template:null, text:"Name: ${person.name}")
}
render
hat sein Herz gebogen auf sich durch die Vorlage zu machen, egal was ich tue.
Follow-up 2: Parallel discussion auf Grails-Benutzer-Mailing-Liste.
Nachverfolgung 3: Beispielcode: Ich packte meinen Code das Minimum und es zeigt immer noch die unerwünschte Vorlage Rendering.
Controller/PersonController.groovy:
class PersonController {
def index = { }
def home = { [message:"Hello"] }
def ajaxTest = {
println "ajaxTest called"
render text: "ajax message"
}
}
views/Person/home.gsp (siehe Seite für Heim Methode)
<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>
Ansichten/Layouts/person.gsp (Layout-Vorlage für Person Controller)
<html>
<head>
<title>Test App - <g:layoutTitle/></title>
<g:layoutHead/>
</head>
<body>
<h1>Test App</h1>
<g:layoutBody/>
</body>
</html>
ich Zugriff Person Controller mit der Wohnansicht: http://localhost:8080/test/person/home
die Seite rendert als: Test App Ajax-Aufruf (Hyperlink) Message = Hallo Blank
"Test App" aus der Vorlage ist. Wenn ich auf "ajax call" klicke, macht es einen asynchronen Aufruf von PersonControllers ajaxTest-Methode (verifiziert mit println). Alles was ajaxTest macht ist println und rendert statischen Text. Das sich ergebende in der folgenden:
Test App
ajax call
Message = Hello
Test App
ajax message
Hinweis, dass die Vorlage innerhalb von „Test1“ <p>
gerendert wird, die in der zweiten „Test App“ führt.
Ich renne Grails 1.1.1. Irgendwelche Ideen? Der Code scheint einfach zu sein. Ich habe die Grails-Quelle heruntergeladen und RenderDynamicMethod.java angesehen. Es führt kein Template-Rendering aus, es sei denn, die Vorlage befindet sich in der Argumentliste, was nicht der Fall ist. Also meine einzige Vermutung ist, dass Up-Stream die Vorlage erneut rendert.
woher weißt du das? –
Ja, bitte erläutern Sie, wo Sie diese Antwort gefunden haben. Nebenbei bemerkt, es ist eine absolute Schande, dass Kapitel 1, das mich 30 Minuten gekostet haben sollte, Stunden gedauert hat. Und ich bin völlig enttäuscht von meinem ersten Stich bei Grails –