阻止taglib输出的编码

时间:2014-11-24 19:17:29

标签: grails taglib

在我的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
            }
        }
    }
}

1 个答案:

答案 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
    }
}