我刚刚开始在 Grails 中使用服务,在尝试从服务内部渲染页面时遇到问题,我尝试了如下所示的几种方法,但没有成功:
服务电话 1:
GroupCheckService.isEnabled(userObjects.group.notenabled)
服务尝试1:
import grails.gsp.PageRenderer
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(boolean notenabled) {
if(notenabled == true){
groovyPgeRenderer.render(view: '/locked')
}else{
return
}
}
}
服务电话 2:
GroupCheckService.isEnabled(render, userObjects.group.notenabled)
服务尝试2:
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(Closure render, boolean notenabled) {
if(notenabled == true){
render.call view:"/locked"
}else{
return
}
}
}
现在,当我尝试方法 1 时,我没有收到错误,但当 IF 满足时,页面不会呈现,使用方法 2 时,我收到以下错误:
no such property render
我真的很感激一些关于如何实现这一目标的建议或帮助,提前致谢:)
您不应该从服务渲染视图 - 这是控制器的一部分。
使用该服务进行业务逻辑和/或(事务)数据库操作。
From Grails 文档 http://grails.org/doc/latest/guide/services.html:
Grails 中的服务是将大部分逻辑放入应用程序中的地方,让控制器负责通过重定向等处理请求流。
如果你真的想从服务中渲染视图,Mrhaki 已发表博客 http://mrhaki.blogspot.de/2012/03/grails-goodness-render-gsp-views-and.html关于使用PageRenderer
从服务。
import grails.gsp.PageRenderer
class GroupCheckService {
PageRenderer groovyPageRenderer
def isEnabled(Closure render, boolean notenabled) {
if(notenabled == true){
groovyPageRenderer.render view: "/locked"
}else{
return
}
}
}
请注意,您不能使用Sitemesh
布局由于PageRenderer
在请求范围之外工作。
最好的方法是重新设计您的应用程序,将渲染内容保留在控制器中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)