Nel mio controller Grails sto rispondendo ad una chiamata AJAX e l'utilizzo di render
di restituire il testo:Grails "render" rende il modello
def ajaxRandomPersonName = {
def person = get a random person ...
render "Name: ${person.name}"
}
Il problema è che render
rende l'intero modello. Quindi, invece di eseguire il rendering di "Nome: John", rende tutte le icone, la navigazione, ecc definite nel modello. Come faccio a ottenere render
per eseguire il rendering senza il modello?
Sto seguendo il capitolo 1 di "Grails in azione" (pagina 28) utilizzando Grails 1.1.1.
Follow-up: Il ritorno false per suggerimento di Rhysyngsun non ha alcun impatto. Ho anche provato a installare il modello a null, ma rende comunque il modello:
def ajaxRandomPersonName = {
def person = get a random person ...
render (template:null, text:"Name: ${person.name}")
}
render
ha la sua vocazione cuore su rendendolo attraverso il modello, non importa quello che faccio.
Follow-up 2: Parallel discussion sulla mailing list grails-user.
Follow up 3: Codice di esempio: Ho abbinato giù il mio codice il minimo indispensabile e presenta ancora il rendering modello indesiderato.
controller/PersonController.groovy:
class PersonController {
def index = { }
def home = { [message:"Hello"] }
def ajaxTest = {
println "ajaxTest called"
render text: "ajax message"
}
}
views/persona/home.gsp (pagina di visualizzazione per il metodo di casa)
<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/layout/person.gsp (modello di layout a persona Controller)
<html>
<head>
<title>Test App - <g:layoutTitle/></title>
<g:layoutHead/>
</head>
<body>
<h1>Test App</h1>
<g:layoutBody/>
</body>
</html>
accedo persona controller con la vista di casa: http://localhost:8080/test/person/home
pagina rende come: Test App chiamata AJAX (collegamento ipertestuale) Messaggio = Ciao Blank
"Test App" è dal modello. Quando clicco su "ajax call" effettua una chiamata asincrona al metodo ajaxTest di PersonController (verificato con println). Tutto ciò che fa ajaxTest è println e renderizza il testo statico. Ciò che ne risulta la seguente:
Test App
ajax call
Message = Hello
Test App
ajax message
Si noti che il modello viene emessa entro "test1" <p>
che si traduce nel secondo "App Test".
Sto eseguendo Grails 1.1.1. Qualche idea? Il codice sembra semplice. Ho scaricato l'origine di Grails e ho esaminato RenderDynamicMethod.java. Non esegue alcun rendering di template a meno che template non sia nella lista degli argomenti, che non lo è. Quindi la mia unica ipotesi è che qualcosa stia rendendo nuovamente il template.
come lo sapevi? –
Sì, ti preghiamo di approfondire dove hai trovato questa risposta. In una nota a margine, è un vero peccato che il capitolo 1, che dovrebbe richiedere 30 minuti, mi abbia richiesto ore per essere completato. E sono completamente deluso dalla mia prima pugnalata a Grails –