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

Expression codec (grails.views.gsp.codecs.expression) seems to be ignored in deployed war file

在新的 grails 4.0.4 应用程序中

的设置
grails:
  views:
    gsp:
      codecs:
        expression: none

在 Tomcat 8.5.39 中作为 war 文件部署时似乎被忽略了。 (JVM 11.0.7+10-post-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) 中部署了 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 中非常有用。似乎它在 Grails 4.0.4 中被破坏了...... 也许 the new Groovy Page Compiler Task. The config file (aka application.yml) variable here 带来的问题从未被使用过。但这只是在咖啡太少的情况下快速调查后的假设 ;-)

解决方法或我的首选方法(仍在 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]"/>