„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.