将值注入内部标记

时间:2012-08-05 07:42:06

标签: grails groovy taglib

有两个嵌套标签,如何将变量注入内部标签绑定?

class CriteriaTagLib {

    def criteria = { attrs, body ->
        out << "start"
        out << body.call()
        out << "end"
    }

    def eq = {
        out << "eq${group}"
    }
}

进入GSP页面:

<g:criteria>
    <g:eq></g:eq>
<g:criteria>

问题是如何在group内设置eq(在criteria内使用)的值。

2 个答案:

答案 0 :(得分:3)

<q:criteria>可以将自己的上下文/数据作为请求范围属性(或页面范围),并在<q:eq>内部使用它(不要忘记在结束标记时将其删除)。像:

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  
}

答案 1 :(得分:0)

内部标记eq不知道其外部标记criteria。但你可以实现类似下面的事情,

def criteria = { attrs, body ->
    out << "start"
    out << body('hello there')
    out << "end"
}

def eq = {attrs->
    out << "eq${attrs.group}"
}

并在gsp页面中

<g:criteria>
  <g:eq group="${it}"/>
</g:criteria>