我对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服务的教程,那将非常有用 谢谢
答案 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文件的顶部有正确的包声明