我已经定义了这样的taglib:
class FooTagLib {
static namespace = "foo"
def bar = { attrs, body ->
out << render(template: "/taglib/foo/bar", model: [body: body])
}
}
身体闭合需要两个参数,即Baz和Qux,为什么我不能在我的/taglib/foo/_bar.gsp中这样做:
${body(baz: 'Hello', qux: 'world!')}
?
这就是我在GSP视图中使用此标签的方式:
<foo:bar>
${baz} ${qux}
</foo:bar
它打印了身体的内容,但参数都是null
:
null null
这是一个错误还是我做错了什么?
在taglib内部您永远不会指定任何参数,这不是自动完成的,因为Taglib不知道地图键的名称。您必须在模型中指定地图键和值。
class FooTagLib {
static namespace = "foo"
def bar = { attrs, body ->
def s = body()
def tokens = s.tokenize()
out << render(template: "/taglib/foo/bar", model: [body: [baz:tokens[0], qux:tokens[1]] ])
}
}
也许身体划分并不是您应该做的,但这只是为了使事情变得清晰。
您更容易使用attrs
,而不是用参数构建身体闭合。