2012-05-30 185 views
1

我一直在互联网上搜索关于父/子关系的嵌套标签的文档,但到目前为止我一无所获。我想学习的是,反正是有这样一个定制的“父”标签了解它的“孩子”Grails嵌套标签

<mytag:parent source="${somelist}"> 
    <mytag:child column="name" style="padding-left:10px"> 
    </mytag> 
    <mytag:child column="surname" style="padding-left:10px"> 
    </mytag> 
</mytag> 

在这个例子中父标签获取集合和孩子通过调用somelist.name打印他们给出列分别为somelist.surname。我是否必须解析DOM以了解有关儿童的信息,或者我可以用“常规”代码以某种方式接触到孩子吗?

回答

5

<mytag:parent>应该将自己的上下文/数据作为请求范围属性(或页面范围),将其处理为<mytag:child>,并在关闭标记上将其删除。像:

static final CONTEXT = this.class.name 

def parent = { attrs, body -> 
    def data = [ 
     name: 'test 1', 
     surname: 'test 2' // i guess you want to load this values from attr.source 
    ] 
    request.setAttribute(CONTEXT, data) 
    out << body.call() 
    request.removeAttribute(CONTEXT) 
} 


def child = { attrs, body -> 
    def data = request.getAttribute(CONTEXT) 
    out << 'name: ' 
    out << data.name 
    out << 'surname: ' 
    out << data.surname 
} 
+0

这抛出该异常为类 groovy.lang.MissingMethodException 消息 方法的无签名:org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.removeAttribute()是适用于参数类型:( java.lang.String,java.util.LinkedHashMap)values:[java.lang.Class,[x:1,name:test]]可能的解决方案:removeAttribute(java.lang.String) – ufucuk

+0

当然,尝试更新版本 –

+0

首先非常感谢您的帮助,但当代码被称为时,此代码在屏幕上不会显示任何内容。 – ufucuk