我刚刚开始尝试使用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
}
}
}
现在“ notenabled ”项的值是一个布尔值,如果我在控制器中有代码,代码就可以工作但是我想只有这个代码写在一个地方所以我可以调用它来自多个功能和控制器。当我在上面运行此代码并尝试加载“测试”视图时,我收到此错误:
错误代码:
| 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
有人可以告诉我我做错了什么以及为什么我不能将这个布尔值传递给服务?提前致谢
的 的 ** * ** * ** EDIT 的 * ** * ** * **
我现在已经使用param正确调用了服务但是我有另一个问题,即渲染不起作用,因为我怀疑这不会起作用,因为它在我实现的控制器之外下面的代码更改以解决问题但是这也无效。没有错误但是当组被锁定并且它进入第一个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
}
}
}
我感谢您提供的任何帮助或建议。感谢
答案 0 :(得分:1)
不,您无法直接从服务呈现视图,因为您没有在服务类中使用 render 方法。 虽然,有办法解决这个问题,就是将render作为一个闭包来自控制器并在服务中调用它。
控制器代码
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"
}
}
答案 1 :(得分: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
}
}