表达式编解码器(grails.views.gsp.codecs.Expression)在部署的war文件中似乎被忽略了



在一个新的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 = {&quot;a&quot;:23,&quot;b&quot;:42,&quot;c&quot;: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]"/>

最新更新