【问题标题】:"Cannot invoke method on null object" when injecting service into a controller将服务注入控制器时“无法在空对象上调用方法”
【发布时间】:2020-01-15 02:53:56
【问题描述】:

我创建了一个全新的 Grails 4.0.0 应用程序并使用 grails cmd 创建了一个域/控制器。我还创建了一个简单的服务,它将“Hello World”返回给控制器,然后控制器将其呈现到屏幕上。但是,当我尝试调用服务方法时,我得到“无法在空对象上调用方法” - 似乎依赖注入无法正常工作。

我尝试过使用“def”声明服务,也尝试过按类名声明 - 似乎都不起作用。

package uk.org.pmms

import grails.gorm.transactions.Transactional

@Transactional
class HelloWorldService {

    def hello() {
        return "Hello World"
    }
}
package uk.org.pmms

class ClientController {

    //static scaffold = Client

    def helloWorld

        def show(Long id){
          Client clientInstance = Client.get(id)
          respond ("client": clientInstance, "message": helloWorld.hello())
        }
    }

我希望控制器返回显示在 GSP 页面上的 clientInstance 数据和字符串“Hello World”。

当我删除响应语句的“消息:”部分时,它会正确显示客户端信息,因此问题肯定只是服务调用。

【问题讨论】:

    标签: grails dependency-injection


    【解决方案1】:

    为您的服务创建的 bean 的名称将是 helloWorldService

    class ClientController {
    
        def helloWorldService // <--- corrected bean name for auto wire by name.
    
        def show(Long id){
          Client clientInstance = Client.get(id)
          respond ("client": clientInstance, "message": helloWorldService.hello())
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多