Grails从服务中呈现视图?
我刚刚开始在Grails中使用服务,在尝试从服务内部呈现页面时遇到问题,我尝试了如下所示的几种方法,但没有成功: 服务电话1:Grails从服务中呈现视图?,grails,service,view,render,Grails,Service,View,Render,我刚刚开始在Grails中使用服务,在尝试从服务内部呈现页面时遇到问题,我尝试了如下所示的几种方法,但没有成功: 服务电话1: GroupCheckService.isEnabled(userObjects.group.notenabled) import grails.gsp.PageRenderer class GroupCheckService { PageRenderer groovyPgeRenderer static transactional = false
GroupCheckService.isEnabled(userObjects.group.notenabled)
import grails.gsp.PageRenderer
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(boolean notenabled) {
if(notenabled == true){
groovyPgeRenderer.render(view: '/locked')
}else{
return
}
}
}
GroupCheckService.isEnabled(render, userObjects.group.notenabled)
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(Closure render, boolean notenabled) {
if(notenabled == true){
render.call view:"/locked"
}else{
return
}
}
}
服务尝试1:
GroupCheckService.isEnabled(userObjects.group.notenabled)
import grails.gsp.PageRenderer
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(boolean notenabled) {
if(notenabled == true){
groovyPgeRenderer.render(view: '/locked')
}else{
return
}
}
}
GroupCheckService.isEnabled(render, userObjects.group.notenabled)
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(Closure render, boolean notenabled) {
if(notenabled == true){
render.call view:"/locked"
}else{
return
}
}
}
服务电话2:
GroupCheckService.isEnabled(userObjects.group.notenabled)
import grails.gsp.PageRenderer
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(boolean notenabled) {
if(notenabled == true){
groovyPgeRenderer.render(view: '/locked')
}else{
return
}
}
}
GroupCheckService.isEnabled(render, userObjects.group.notenabled)
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(Closure render, boolean notenabled) {
if(notenabled == true){
render.call view:"/locked"
}else{
return
}
}
}
服务尝试2:
GroupCheckService.isEnabled(userObjects.group.notenabled)
import grails.gsp.PageRenderer
class GroupCheckService {
PageRenderer groovyPgeRenderer
static transactional = false
def isEnabled(boolean notenabled) {
if(notenabled == true){
groovyPgeRenderer.render(view: '/locked')
}else{
return
}
}
}
GroupCheckService.isEnabled(render, userObjects.group.notenabled)
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
我非常感谢您就如何实现这一点提供一些建议或帮助,提前感谢:)您不应该从服务中提供视图-这是控制器的一部分 将该服务用于业务逻辑和/或(事务性)数据库操作 发件人: Grails中的服务是将大部分逻辑放在应用程序中的地方,让控制器负责处理带有重定向等的请求流 如果确实要从服务中渲染视图,请参阅关于从服务中使用
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
在请求范围之外工作
最好的方法是重新设计应用程序,将呈现内容留在控制器中。首先,从服务呈现HTTP响应是非常糟糕的做法 至于您的代码,您必须使用第一种方法,即使用
groovypgerender.render
。但您没有使用此调用的结果。它是一个返回字符串的方法(请参阅)
所以,您需要手动将该字符串放入HTTP响应中。您可以从控制器或从RequestContextHolder.currentRequestAttributes()
(请参阅)获取HttpServlet响应。比如:
“非常糟糕的做法”。。。当服务为REST webservice响应生成大量数据时,可能会出现异常,数据需要流式输出,而不是存储在传递给控制器的变量中。