Grails 将值注入内部标记
有两个嵌套标记,如何将变量注入内部标记绑定Grails 将值注入内部标记,grails,groovy,taglib,Grails,Groovy,Taglib,有两个嵌套标记,如何将变量注入内部标记绑定 class CriteriaTagLib { def criteria = { attrs, body -> out << "start" out << body.call() out << "end" } def eq = { out << "eq${group}" } } 类CriteriaTa
class CriteriaTagLib {
def criteria = { attrs, body ->
out << "start"
out << body.call()
out << "end"
}
def eq = {
out << "eq${group}"
}
}
类CriteriaTagLib{
定义标准={attrs,body->
out
可以将自己的上下文/数据作为请求范围属性(或页面范围),并通过
在内部使用它(不要忘记在结束标记时删除它)。例如:
static final CONTEXT=this.class.name
定义标准={attrs,body->
def数据=[
组:“测试1”
]
request.setAttribute(上下文、数据)
out内部标签eq
不知道其外部标签标准。但是您可以实现如下功能:
def criteria = { attrs, body ->
out << "start"
out << body('hello there')
out << "end"
}
def eq = {attrs->
out << "eq${attrs.group}"
}
def标准={attrs,body->
我们已经找到了这个解决方案。我所寻找的是类似于groovy绑定的内部闭包,但似乎不可能使用taglib闭包。可以用java开发taglib吗?就像foreach
和类似的标准grails标记一样?如果你说的是普通java webapp,你可以使用javaNo,我的意思是实现使用java编写的org.codehaus.groovy.grails.web.taglib.GroovyEachTag
之类的标记。好的,我明白了。实际上我没有尝试用java来实现GSP标记,但我没有发现任何问题,我相信您可以使用相同的方法
static final CONTEXT = this.class.name
def criteria = { attrs, body ->
def data = [
group: 'test 1'
]
request.setAttribute(CONTEXT, data)
out << "start"
out << body.call()
out << "end"
request.removeAttribute(CONTEXT)
}
def child = { attrs, body ->
def data = request.getAttribute(CONTEXT)
out << 'eq'
out << data.group
}
def criteria = { attrs, body ->
out << "start"
out << body('hello there')
out << "end"
}
def eq = {attrs->
out << "eq${attrs.group}"
}
<g:criteria>
<g:eq group="${it}"/>
</g:criteria>