Grails - Невозможно вызвать службу из контроллера -> всегда получить «Невозможно вызвать метод при ошибке нулевого объекта» - PullRequest
0 голосов
/ 30 декабря 2010

У меня есть приложение Grails, и я слежу за уроком здесь:
http://www.grails.org/Services

У меня есть какой-то код вроде

import org.springframework.beans.factory.InitializingBean

class SubmitRequestService implements InitializingBean{
    def GrailsApplication1
    def setting

    void afterPropertiesSet(){
        this.setting = GrailsApplication1.config.setting
    }

    def void sendHistoricalContract(HistoricalContract hc_instance){
        //... blah blah whatever code      
    }
}

class SubmitRequestController {    
    def submitRequestService
    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

    def index = {
        // .... blah blah whatever code
        submitRequestService.sendHistoricalContract(historicalContractInstance)
    }    
}

Нет, что бы я ни делалЯ не могу получить сервис для инъекции в контроллер.Всякий раз, когда я добираюсь до линии, где я вызываю службу, я получаю ошибку:

ERROR errors.GrailsExceptionResolver - Невозможно вызвать метод sendHistoricalContract () для нулевого объекта

Что такоея делаю не так?

Заранее спасибо

Ответы [ 3 ]

6 голосов
/ 30 декабря 2010

GrailsApplication1 выглядит странно - откуда это? Если вы хотите получить доступ к экземпляру GrailsApplication, чтобы получить доступ к конфигурации, используйте внедрение зависимостей для grailsApplication Spring bean:

class SubmitRequestService implements InitializingBean {

   private setting

   def grailsApplication

   void afterPropertiesSet() {
       setting = grailsApplication.config.setting
   }

   void sendHistoricalContract(HistoricalContract hc_instance) {
      //... blah blah whatever code      
   }
}

Я предполагаю, что GrailsApplication1 вызывает проблему со службой, которая препятствует его внедрению в контроллер, но я думаю, что при запуске он взорвется с исключением. Попробуйте запустить grails clean для полной перекомпиляции.

1 голос
/ 19 сентября 2011

Я сталкивался с этим раньше.

Я изменил его на grailsApplication1, и это сработало.

Затем вы звоните:

this.setting = grailsApplication1.config.setting

Обратите внимание на случай услуги

0 голосов
/ 31 декабря 2010

Ответ Бёрта полезен (+1 к Бёрту), но если другие читают здесь урок:
http://www.grails.org/Services
и испытывают ту же проблему, что и у меня, я хочу сделать это явным:

Службы располагаются в своих собственных файлах в каталоге Services, вы не объединяете их с контроллерами, даже если в примерах кода это выглядит так

См. Комментарий Берта выше о дополнительныхресурсы для Сервисов и Spring Framework.

...