2012-08-05 42 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>