首页 > 解决方案 > 表达式编解码器(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-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 文件。任何帮助表示赞赏!

标签: grailsconfigurationgspcodecgrails-4

解决方案


它就像 Grails 4.0.3 中的魅力一样。似乎它在 Grails 4.0.4 中被破坏了......也许问题来自新的 Groovy Page Compiler Task此处的配置文件(aka 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]"/>

推荐阅读