Grails 防止对taglib输出进行编码

Grails 防止对taglib输出进行编码,grails,taglib,Grails,Taglib,在我的Grails应用程序中,我定义了下面的标记,它输出一个映射 class DataBindingTagLib { static namespace = "bind" def domainParamList = { attrs -> def params = [:] // put stuff in the map return params } } 当我调用此标记并将结果存储在变量中时 <g:set v

在我的Grails应用程序中,我定义了下面的标记,它输出一个
映射

class DataBindingTagLib {

    static namespace = "bind"

    def domainParamList = { attrs ->

        def params = [:]
        // put stuff in the map
        return params
    }
}
当我调用此标记并将结果存储在变量中时

<g:set var="chartParams" value="${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
            }
        }
    }
}

您需要指示标记库返回一个对象,因此,默认情况下,标记库需要修改输出流

首先,通过使用
returnObjectForTags
静态提示,让标记库知道您需要这个特定的方法/闭包来返回一个对象。然后,只需将方法/闭包修改为
return
对象,而不是修改
out
。通过这两个更改,您的标记将返回一个对象,您可以这样使用它

class DataBindingTagLib {

    static namespace = "bind"
    static returnObjectForTags = ['domainParamList']

    def domainParamList = { attrs ->

        def params = [:]
        // put stuff in the map
        return params
    }
}

谢谢,你认为使用这样的标记库是完全可以接受的,还是有点不受欢迎?完全可以接受,一些核心标记库以及一些非常流行的插件(例如Spring Security)都可以这样做。很好,如果有人抱怨,我会怪你:)哈哈,听起来你会很适合我的同事。我们的非官方政策是“责怪乔希,那我们继续吧。”我尝试了你的建议,但没有解决问题。我已经更新了我的问题,以显示我所做的代码更改
class DataBindingTagLib {

    static namespace = "bind"
    static returnObjectForTags = ['domainParamList']

    def domainParamList = { attrs ->

        def params = [:]
        // put stuff in the map
        return params
    }
}