grails - 表达式编解码器(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 = {"a":23,"b":42,"c":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 中被破坏了......也许问题来自新的 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]"/>
推荐阅读
- flutter - Flutter RawKeyboardListener
- laravel - 为什么我在 repo 重置后收到 Forge Laravel 505 服务器错误
- ios - 如何从 iOS 设置应用程序启动应用程序?
- visual-studio-2019 - 如何在 Visual Studio 2019 中关闭自动重命名?
- java - EMF 如何通知编辑器我的模型已更改,需要保存?
- php - 如何按上次修改时间更改 WooCommerce 商店存档订单
- ibm-cloud - ibm-cloud:正在配置 db2
- python - 错误 15 尝试发送/获取消息时访问被拒绝
- python - 安装 Python 包时如何编译 C/C++
- python - 关于关闭 3D Delaunay 三角测量的问题