Grails GSP - 无法使用参数调用body

时间:2012-10-21 22:21:07

标签: grails gsp taglib

我已经定义了这样的taglib:

class FooTagLib {
    static namespace = "foo"

    def bar = { attrs, body ->
        out << render(template: "/taglib/foo/bar", model: [body: body])
    }
}

body关闭有两个参数,baz和qux,为什么我不能在/taglib/foo/_bar.gsp中执行此操作:

${body(baz: 'Hello', qux: 'world!')}

这是我在gsp视图中使用此标记的方式:

<foo:bar>
    ${baz} ${qux}
</foo:bar

它打印正文的内容,但参数都是null

null null

这是一个错误还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

在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,而不是使用参数构建主体闭包。