2012-08-05 44 views
1

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

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> 

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

+0

请添加样品。 – 2012-08-05 07:43:49

回答

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 
} 
+0

已经找到这个解决方案。我正在寻找的是像内部闭包的groovy绑定,但似乎它不可能使用taglib闭包。 – 2012-08-05 12:04:37

+0

是否可以在java中开发taglibs?就像'foreach'和类似的标准grails标签一样吗? – 2012-11-28 16:37:15

+0

如果你在谈论普通的java webapp,你可以使用java开发JSP taglib – 2012-11-29 03:02:57

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>