包内的grails服务

时间:2011-04-08 09:14:00

标签: grails groovy service


我对grails和spring很新 我创建了service这样的

services\com.mypackage\MyService 

其中

class MyService {
    static transactional = true

    def serviceMethod(params) {
         println "params:"+params
    }
}

然后在我的控制器中

controller\com.mypackage\mycontroller

然后在我的行动中我试图像这样访问

def myaction= {
        com.mypackag.MyService myService //also used def myService
        myService.serviceMethod(params)
        render(view: "otherpage")
    }

但它显示以下错误:(

java.lang.NullPointerException: Cannot invoke method serviceMethod() on null object

它不能成为myservice的对象。

myService shows null

我做错了什么?

如果有人向我提供了一些良好的简单链接以及使用grails服务的教程,那将非常有用 谢谢

3 个答案:

答案 0 :(得分:4)

你做的一个错误。
您在myService关闭内声明myaction。应该在您的任何方法或闭包之外的controller 中进行操作 您可以使用任何方法或闭包中的服务对象(此处为myService)来访问您的服务方法

所以改变就像这样 在controller\com.mypackage\mycontroller首先声明您的服务

def myService 

然后您可以在任何closures

中访问它
 def myaction= {
        myService.serviceMethod(params)
        render(view: "otherpage")
    }

答案 1 :(得分:1)

您的目录层次结构与您的包不对应。您应该将服务的目录层次结构更改为:

services\com\mypackage\MyService.groovy

并确保在MyService.groovy

的顶部添加以下内容
package com.mypackage

class MyService {
  // .....
}

同样,将控制器的目录层次结构更改为

controller\com\mypackage\MyController.groovy

然后在您的控制器中获取对您服务的引用

// add the correct package statement
package com.mypackage

// rename the controller and the mycontroller.groovy file to MyController
class MyController {

  // this will be injected by Spring (it must be named with a lower-case 'm')
  def myService

  def myaction= {
    // use the service inside your action
    myService.serviceMethod(params)
    render(view: "otherpage")
  }
}

答案 2 :(得分:0)

1)我读过Grails User guide on Services

2)我使用grails提供的命令行工具来提供服务,因为它可以节省你把东西放在无效的目录中(com.mypackage作为文件夹名称只会给你带来麻烦),它将确保您在groovy文件的顶部有正确的包声明