Grails "render" rendert die Vorlage

In meinem Grails-Controller antworte ich auf einen AJAX-Aufruf und benutzerender um den text zurückzugeben:

def ajaxRandomPersonName = {
    def person = get a random person ...
    render "Name: ${person.name}"
}

Das Problem ist, dassrender Rendert die gesamte Vorlage. Anstatt nur "Name: John" zu rendern, werden alle in der Vorlage definierten Symbole, Navigationselemente usw. gerendert. Wie bekomme ichrender ohne die vorlage einfach rendern?

Ich verfolge mit Grails 1.1.1 ziemlich genau Kapitel 1 von "Grails in Action" (Seite 28).

Nachverfolgen: Die Rückgabe von false gemäß Rhysyngsuns Vorschlag hat keine Auswirkungen. Ich habe auch versucht, die Vorlage auf null zu setzen, aber sie rendert immer noch die Vorlage:

def ajaxRandomPersonName = {
    def person = get a random person ...
    render (template:null, text:"Name: ${person.name}")
}

render hat es sich zum Ziel gesetzt, es durch die Vorlage zu rendern, egal was ich tue.

Follow-up 2: Parallele Diskussion auf grails-user mailing list.

Follow-up 3: Beispielcode: Ich habe meinen Code auf das Nötigste reduziert und er zeigt immer noch das unerwünschte Template-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 (Seite für die Startseite anzeigen)

<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 / person.gsp (Layoutvorlage für den Personencontroller)

<html> 
<head> 
    <title>Test App - <g:layoutTitle/></title> 
    <g:layoutHead/> 
</head> 
<body> 
    <h1>Test App</h1> 
    <g:layoutBody/> 
</body> 
</html> 

Ich greife über die Startansicht auf die Personensteuerung zu:http: // localhost: 8080 / test / person / home

Die Seite wird wie folgt wiedergegeben: Test App Ajax Call (Hyperlink) Message = Hello Blank

"Test App" stammt aus der Vorlage. Wenn ich auf "ajax call" klicke, wird die ajaxTest-Methode von PersonController asynchron aufgerufen (mit println überprüft). Alles, was AjaxTest tut, ist das Drucken und Rendern von statischem Text. Daraus ergibt sich Folgendes:

Test App 
ajax call 
Message = Hello 
Test App 
ajax message 

Beachten Sie, dass die Vorlage in "test1" gerendert wird<p> was zur zweiten "Test App" führt.

Ich lasse Grails 1.1.1 laufen. Irgendwelche Ideen? Der Code scheint einfach zu sein. Ich habe die Grails-Quelle heruntergeladen und mir RenderDynamicMethod.java angesehen. Es wird keine Vorlage gerendert, es sei denn, die Vorlage befindet sich in der Argumentliste, was nicht der Fall ist. Ich vermute also, dass die Vorlage erneut gerendert wird.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage