在一个新的grails 4.0.4应用程序中,的设置
grails:
views:
gsp:
codecs:
expression: none
在Tomcat 8.5.39中作为war文件部署时,似乎被忽略了。(JVM 11.0.7+10-Ubuntu-2ubuntu218.04之后(
添加此
<head>
...
<script>
var foo = ${[a:23, b:42, c:666] as grails.converters.JSON};
</script>
</head>
生成的grails-app/views/index.gsp
显示为
var foo = {"a":23,"b":42,"c":666};
当运行grails run-app
甚至grails prod run-app
(!(时,但被编码为
var foo = {"a":23,"b":42,"c":666};
在打包的(grails prod war
(部署的战争文件中。
除了改变外,build.gradle
未经修改
compile "org.grails.plugins:cache"
到这个
compile("org.grails.plugins:cache") {
exclude module:'groovy-all'
}
这是一个错误还是我使用了错误的编解码器设置?也许有一个插件覆盖了这些设置(比如这里https://github.com/grails/grails-core/issues/10722)但我找不到任何其他yml文件。感谢您的帮助!
它的工作原理就像Grails 4.0.3中的一个符咒。它似乎在圣杯4.0.4中被打破了。。。也许问题来自于新的Groovy页面编译器任务。这里的配置文件(又名application.yml
(变量从未使用过。但这只是在咖啡太少的情况下进行快速调查后的假设;-(
变通方法或我喜欢的方式(仍在Grails 4.0.4中工作(
一些帮助TagLib像这样:
import grails.converters.JSON
class FooTagLib {
static defaultEncodeAs = [taglib:'none']
static namespace = "foo"
def json = { attrs, body ->
out << raw(attrs.data as JSON)
}
}
用法:
var foo = <foo:json data="[a:23, b:42, c:666]"/>