Я в процессе обновления до Grails 4.0.1, и у меня проблемы с интернационализацией. Я продолжаю получать NullPointerException
ошибку java.lang.NullPointerException: Cannot invoke method getMessage() on null object
. Строка кода, вызывающая ошибку:
return messageSource.getMessage('dashboard.completed.label', 'Approved', LocaleContextHolder.getLocale())
Когда I println(messageSource)
, значение равно нулю. Я попытался добавить
spring:
messages:
basename: grails-app/i8n/**
к своему application.yml
, но я все еще получаю ту же ошибку. Я подумал, что, возможно, проблема в том, что в моем resources.groovy
отсутствует bean-компонент, поэтому я добавил следующий bean-компонент messageSource в 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
.
Затем я решил попробовать поместить боб в файл 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
. Проанализировав inte rnet, я нашел ресурс, который предложил обходной путь, инициализировав messageSource внутри bootstrap.groovy
, поэтому добавил следующее:
def messageSource
def init = { servletContext ->
messageSource.basenames = ['/grails-app/i18n/messages']
messageSource.afterPropertiesSet()
}
, выдающее ту же ошибку NullPointerException
.
До обновления я работал нормально. Если я println(messageSource)
изнутри bootstrap.groovy
, программа печатает массив базовых имен. Тем не менее, выполнение println(messageSource)
в моем контроллере после введения источника сообщения выводит «null». Возможно, я что-то упустил в процессе обновления, но я не уверен, что это такое. Кто-нибудь знает, почему я получаю сообщение об ошибке и возможные шаги, которые можно предпринять, чтобы исправить это?