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>