我正在升级到 Grails 4.0.1,但我遇到了国际化问题。我不断收到NullPointerException
错误消息java.lang.NullPointerException: Cannot invoke method getMessage() on null object
。导致错误的代码行是:
return messageSource.getMessage('dashboard.completed.label', 'Approved', LocaleContextHolder.getLocale())
当 Iprintln(messageSource)
时,值为空。我试过添加
spring:
messages:
basename: grails-app/i8n/**
到我的application.yml
,但我仍然得到同样的错误。我想问题可能是我的 bean 丢失了resources.groovy
,所以我将以下 messageSource bean 添加到resources.groovy
:
beans = {
messageSource(ReloadableResourceBundleMessageSource){
basename = grails-app/i18n/messages
}
}
但是,这会产生以下错误org.grails.core.exceptions.GrailsConfigurationException: Error loading spring/resources.groovy file: No such property: grails for class: grails.spring.BeanBuilder
。
然后我决定尝试将 bean 放在一个resources.xml
文件中,而不是resources.groovy
.
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="grails-app/i18n/" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
但这也会产生一个NullPointerException
. 在搜索了互联网之后,我找到了一个资源,它通过在里面初始化 messageSource 来提出解决方法,bootstrap.groovy
所以我在其中添加了以下内容:
def messageSource
def init = { servletContext ->
messageSource.basenames = ['/grails-app/i18n/messages']
messageSource.afterPropertiesSet()
}
这会产生相同的NullPointerException
错误。
这在我升级之前工作正常。如果我println(messageSource)
从内部bootstrap.groovy
,程序打印基本名称数组。但是,println(messageSource)
在注入消息源后在我的控制器中执行打印“null”。也许我在升级过程中遗漏了一些东西,但我不确定它是什么。有没有人知道我为什么会收到错误以及我可以采取哪些步骤来修复它?