在我的Grails应用中,我定义了以下标记,该标记输出Map
class DataBindingTagLib {
static namespace = "bind"
def domainParamList = { attrs ->
def params = [:]
// put stuff in the map
return params
}
}
当我调用此标记并将结果存储在变量
中时<g:set var="chartParams" value="${bind.domainParamList([:])}"/>
如果我检查这个变量的类型,那就是StreamCharBuffer
。所以似乎taglib输出的值会自动转换为此类型。我试图通过将上面的行改为
<g:set var="chartParams" value="${raw(bind.domainParamList([:]))}"/>
但它没有任何区别。有没有办法防止这种情况发生,以便我可以将标记返回的Map
实例存储在chartParams
GSP变量中?我不确定这是否相关,但我在Config.groovy
grails {
views {
gsp {
encoding = 'UTF-8'
htmlcodec = 'xml' // use xml escaping instead of HTML4 escaping
codecs {
expression = 'html' // escapes values inside ${}
scriptlet = 'none' // escapes output from scriptlets in GSPs
taglib = 'none' // escapes output from taglibs
staticparts = 'none' // escapes output from static template parts
}
}
}
}
答案 0 :(得分:1)
您需要指示您的标记库返回一个对象,默认情况下,标记库会修改输出流。
首先,让标记库知道您需要使用此特定方法/闭包来使用returnObjectForTags
静态提示返回对象。然后,只需将方法/闭包修改为return
您的对象,而不是修改out
。通过这两个更改,您的标记将返回一个对象,您可以这样使用它。
class DataBindingTagLib {
static namespace = "bind"
static returnObjectForTags = ['domainParamList']
def domainParamList = { attrs ->
def params = [:]
// put stuff in the map
return params
}
}