【发布时间】:2020-07-08 06:31:43
【问题描述】:
我正在将现有的 Grails 2.5.6 项目转换为 Grails 3.3.11。
对于我现有的应用程序(Grails 2.5.6),插件描述符的代码如下:
def doWithApplicationContext = { applicationContext ->
def config = applicationContext.grailsApplication.config
def key = config.property.key
key.put(Constants.RESULT_CONST, [controller: "results", action: "showData", templatePath: "/results/data"])
}
此代码适用于早期版本的 grails。但是在我升级到 grails 3.3.11 之后,它会抛出异常:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
这是在行:
key.put(Constants.RESULT_CONST, [controller: "results", action: "showData", templatePath: "/results/data"])
查看键的类型(即 config.property.key)后,它显示的类型为 org.grails.config.NavigableMap$NullSafeNavigator。
旧版本是 LinkedHashMap。
property.key 在 /grails-app/conf/application.groovy 下的 application.groovy 上设置得很好
property.key = [:]
我还尝试在外部将插件描述符中的property.key 类型设置为java.util.HashMap。但是好像没有采用新的类型。
我在这里做错了什么?
【问题讨论】:
-
您的目标仅仅是动态地将条目添加到应用程序的配置中吗?
-
是的。根据规则添加条目。这些条目将从该插件和应用程序的其他部分引用。
-
results和showData的值从何而来? -
对不起,它实际上是值而不是成员变量。更新问题...
-
随着您对问题的最新更新,没有任何动态。这些值都是硬编码的,因此您可以消除所有这些代码并将配置设置放在插件的配置文件中。
标签: grails grails3 grails-3.3