passar variavel para template atraves de taglib
11/04/2012 12:17
1
Boa tarde galera, tenho uma taglib, queria fazer uma consulta armazenar em uma variável, e repassar para o template essa variavel, so que não sei como se faz, alguem pode me ajudar?


class LayoutTagLib {

static namespace = 'layout'

def menu = {
def b = Menu.findAll()
out << render (template: '/common/menu', b)
}
}
Tags: taglib variavel template


1
Oi Douglas, você faz exatamente como num controlador.


class TagLibBrutaTagLib {
def brutalidade = {attrs, body ->
def buscaBruta = BrutalidadeMaxima.findById(attrs.id)
out << render(template:'/brutalidade/maxima', [saida:buscaBruta])
}
}


0
Pois é, fiz como explicou mas está dando erro quando vou passar nesse segundo parametro do render a variavel, simplesmente gera excessão no tomcat.

Creio eu que esse saida seria o nome que quero ter para acessar no html para acessar a variavel certo?
Eu teria de mudar algo no template para funcionar?
Qual a necessidade deste "attrs, body->" no inicio da função da taglib?


class LayoutTagLib {

static namespace = 'layout'

def menu = {attrs, body ->
def menus = sistema.Menu.findAll()
out << render (template: '/common/menu', [saida:menus])
}
}


HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error applying layout : main
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
root cause

org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error processing GroovyPageView: Error executing tag <layout:menu>: groovy.lang.MissingMethodException: No signature of method: ampara.LayoutTagLib.render() is applicable for argument types: (java.util.LinkedHashMap, java.util.LinkedHashMap) values: [[template:/common/menu], [saida:[ampara.sistema.Menu : 1, ...]]]
Possible solutions: menu(), every(), find()
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
root cause

org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException: Error executing tag <layout:menu>: groovy.lang.MissingMethodException: No signature of method: ampara.LayoutTagLib.render() is applicable for argument types: (java.util.LinkedHashMap, java.util.LinkedHashMap) values: [[template:/common/menu], [saida:[ampara.sistema.Menu : 1, ...]]]
Possible solutions: menu(), every(), find()
C__Users_TI_Desktop_ampara_project_ampara_grails_app_views_layouts_main_gsp$_run_closure2.doCall(main.gsp:25)
C__Users_TI_Desktop_ampara_project_ampara_grails_app_views_layouts_main_gsp.run(main.gsp:33)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
root cause

org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: No signature of method: ampara.LayoutTagLib.render() is applicable for argument types: (java.util.LinkedHashMap, java.util.LinkedHashMap) values: [[template:/common/menu], [saida:[ampara.sistema.Menu : 1, ...]]]
Possible solutions: menu(), every(), find()
C__Users_TI_Desktop_ampara_project_ampara_grails_app_views_layouts_main_gsp$_run_closure2.doCall(main.gsp:25)
C__Users_TI_Desktop_ampara_project_ampara_grails_app_views_layouts_main_gsp.run(main.gsp:33)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
root cause

groovy.lang.MissingMethodException: No signature of method: ampara.LayoutTagLib.render() is applicable for argument types: (java.util.LinkedHashMap, java.util.LinkedHashMap) values: [[template:/common/menu], [saida:[ampara.sistema.Menu : 1, ...]]]
Possible solutions: menu(), every(), find()
ampara.LayoutTagLib$_closure1$$ENUHUlR0.doCall(LayoutTagLib.groovy:11)
C__Users_TI_Desktop_ampara_project_ampara_grails_app_views_layouts_main_gsp$_run_closure2.doCall(main.gsp:25)
C__Users_TI_Desktop_ampara_project_ampara_grails_app_views_layouts_main_gsp.run(main.gsp:33)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.25 logs.

Apache Tomcat/7.0.25
11/04/2012 12:40


0
Consegui faltou colocar model: antes de [.

Vlw a todos

	def menu = {attrs, body ->
def menus = Menu.findAll();
def saida = "Testando"
out << render (template: '/common/menu', model:[menus:menus])
}
11/04/2012 12:57



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto