Grails 防止对taglib输出进行编码
在我的Grails应用程序中,我定义了下面的标记,它输出一个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
映射
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
}
}