0

我刚开始尝试在 Grails 中使用服务以简化我的应用程序,我想从控制器发送一个布尔值作为参数的服务,并让它处理数据并执行某些操作或只是返回,但我不断收到错误,我不知道为什么。下面是我的代码:

控制器代码:

def testing(){
    def userObjects = springSecurityService.currentUser
    GroupCheckService.isEnabled(userObjects.group.notenabled)

}

服务代码:

class GroupCheckService {

        static transactional = true

        def useable(boolean notenabled) {

            if(notenabled == true){

                render(view:'/locked')

            }else{
                return
            }

        }
    }

现在“未启用”项的值是一个布尔值,如果我将它放在控制器中,代码就可以工作,但是我只想让这个代码写在一个地方,这样我就可以从多个函数和控制器中调用它。当我在上面运行此代码并尝试加载“测试”视图时,我收到此错误:

错误代码:

| Error 2013-09-27 22:55:21,882 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver  - ClassCastException occurred when processing request: [GET] /my_app/feature/testing
com.tool.GroupCheckService cannot be cast to com.tool.GroupCheckService. Stacktrace follows:
Message: com.tool.GroupCheckService cannot be cast to com.tool.GroupCheckService

有人可以告诉我我做错了什么以及为什么我不能将此布尔值传递给服务吗?提前致谢


** * ** * **编辑* ** * ** * **


我现在已经使用参数正确调用了服务,但是我遇到了另一个问题,即渲染不起作用,因为我怀疑这不起作用,因为它在控制器之外我实现了代码更改下面来解决这个问题,但这也不起作用。没有错误,但是当组被锁定并且它进入第一个 IF 视图未呈现时:S

import grails.gsp.PageRenderer

class GroupCheckService {

    PageRenderer groovyPgeRenderer
    static transactional = false

    def isEnabled(boolean notenabled) {

        if(notenabled == true){

            println("INSIDE LOCKED IF")
            groovyPgeRenderer.render(view: '/locked')

        }else{
            return
        }

    }
}

感谢您对此提供的任何帮助或建议。谢谢

4

2 回答 2

1

不,您不能直接从服务中渲染视图,因为您 在服务类中没有可用的渲染方法。虽然,解决这个问题的方法是将渲染作为闭包从控制器传递并在服务中调用它。

控制器代码

class MyController
{
   def myService
   def myAction()
   {
      myService.myFun(render,true)
   }
}

服务代码

class MyService
{
   def myFun(Closure render,boolean flag)
   {
      if(flag)
        render.call view:"view1"
      else
        render.call view:"view2"
   }
}
于 2013-10-01T10:47:13.753 回答
0

控制器代码:

def groupCheckService 
def testing(){
    def userObjects = springSecurityService.currentUser
    def enabled = groupCheckService.isEnabled(userObjects.group.notenabled)
    enabled? render(view:'/unlocked'): render(view:'/locked')
}

服务代码:

class GroupCheckService {

    Boolean isEnabled(Boolean notenabled) {
        !notenabled
    }
}
于 2013-10-01T10:11:08.957 回答