„Render” Grails renderuje szablon

W moim kontrolerze Grails odpowiadam na wywołanie AJAX i używamrender aby zwrócić tekst:

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

Problemem jestrender renderuje cały szablon. Więc zamiast renderować „Nazwa: John”, wyświetla wszystkie ikony, nawigację itp. Zdefiniowane w szablonie. Jak mogę uzyskaćrender po prostu renderować bez szablonu?

Jestem dość podobny do rozdziału 1 „Grails in Action” (strona 28), używając Grails 1.1.1.

Zagryźć: Zwracanie fałszywych sugestii Rhysyngsun nie ma wpływu. Próbowałem również ustawić szablon na wartość null, ale nadal wyświetla szablon:

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

render ma swoje serce nastawione na renderowanie go przez szablon bez względu na to, co robię.

Kontynuacja 2: Dyskusja równoległa na liście mailingowej użytkownika Grails.

Kontynuacja 3: Przykładowy kod: powiązałem mój kod z minimalnym minimum i nadal wyświetla niepożądany rendering szablonu.

controllers / PersonController.groovy:

class PersonController { 
    def index = { } 
    def home = { [message:"Hello"] } 

    def ajaxTest = { 
        println "ajaxTest called" 
        render text: "ajax message" 
    } 
} 

views / person / home.gsp (wyświetl stronę dla metody domowej)

<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 (szablon układu kontrolera osoby)

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

Mam dostęp do kontrolera osoby z widokiem domowym:http: // localhost: 8080 / test / person / home

strona wyświetla się jako: Testuj aplikację ajax wywołanie (hiperłącze) Wiadomość = Hello Blank

„Testuj aplikację” pochodzi z szablonu. Po kliknięciu „wywołanie ajax” wywołuje asynchroniczne wywołanie metody ajaxTest PersonController (zweryfikowanej za pomocą println). Wszystkie ajaxTest to println i renderują statyczny tekst. Wynik ten jest następujący:

Test App 
ajax call 
Message = Hello 
Test App 
ajax message 

Zauważ, że szablon jest renderowany w „test1”<p> co skutkuje drugą „aplikacją testową”.

Używam Grails 1.1.1. Jakieś pomysły? Kod wydaje się prosty. Pobrałem źródło Grails i sprawdziłem RenderDynamicMethod.java. Nie wykonuje renderowania szablonów, chyba że szablon znajduje się na liście argumentów, której nie ma. Więc moim jedynym przypuszczeniem jest, że para ponownie renderuje szablon.

questionAnswers(4)

yourAnswerToTheQuestion