包内的grails服务

包内的grails服务,grails,groovy,service,Grails,Groovy,Service,我对grails和spring非常陌生 Me创建了一个服务,如下所示 services\com.mypackage\MyService 在哪里 class MyService { static transactional = true def serviceMethod(params) { println "params:"+params } } 然后在我的控制器中 controller\com.mypackage\mycontroller 然


我对grails和spring非常陌生
Me创建了一个
服务
,如下所示

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")
    }
但它显示以下错误:(

它不能成为myservice的对象

myService shows null
我犯了什么错误

如果有人能为我提供一些使用grails服务的好的简单链接和教程,那将非常有帮助
谢谢你,我会读的

2) 我会使用grails提供的命令行工具为您提供服务,因为这样可以避免您将内容放入无效目录(
com.mypackage
,因为文件夹名只会给您带来麻烦),而且它会确保您在groovy文件的顶部有正确的包声明


2) 我会使用grails提供的命令行工具为您提供服务,因为这样可以避免将内容放入无效目录(
com.mypackage
,因为文件夹名只会给您带来麻烦),它将确保在groovy文件的顶部有正确的包声明

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

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")
  }
}

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

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")
  }
}

你犯了一个错误。
您正在
myaction
闭包中声明
myService
。应该在任何方法或闭包之外的
控制器中执行

您可以使用任何方法或闭包中的服务对象(此处为myService)访问您的服务方法

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

def myService 
然后您可以在任何
闭包中访问它

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

你犯了一个错误。
您正在
myaction
闭包中声明
myService
。应该在任何方法或闭包之外的
控制器中执行

您可以使用任何方法或闭包中的服务对象(此处为myService)访问您的服务方法

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

def myService 
然后您可以在任何
闭包中访问它

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

感谢tim_yates我在IntelliJ IDEA 10.0.2中工作,在那里我创建了软件包,并通过右键点击服务。您要求我删除该软件包?谢谢tim_yates,我在IntelliJ IDEA 10.0.2中工作,在那里我创建了软件包,并通过右键单击服务。你要我删除那个软件包?更新你的帖子,详细说明你的新配置和你遇到的错误,我会尽力帮助你,其中有一个错误。我声明myaction中包含myService。现在我变了,工作很好。谢谢你的帮助。请更新你的帖子,详细说明你的新配置和你遇到的错误,我会尽力帮助你。这里有一个错误。我声明myaction中包含myService。现在我变了,工作很好。谢谢你的帮助。