Grails中渲染和返回渲染之间的区别是什么

Har*_*ary 2 grails

grails中的以下内容有何区别:

渲染xyz

返回渲染xyz

我在控制器动作中返回渲染xyz,并且在IE中多次调用该控制器动作.我想知道返回渲染是否是罪魁祸首.这在本地intellij tomcat应用服务器中工作正常,但在生产weblogic服务器中失败.

Bur*_*ith 7

render是一个void方法,因此它没有返回值,返回它的返回值相当于返回null.Groovy不返回任何内容(例如只是一个简单的return语句)并返回null为等效语句,并且忽略控制器操作的返回值,除非该值是Map,因为控制器操作的"结果"不一定是返回的内容,而是完成.

具体而言,这意味着您可以发出重定向,转发或渲染调用,并触发预期的响应.但是如果你返回一个Map,那么推断出它是用于渲染GSP的模型图,其名称与控制器视图文件夹中的动作相同,例如barFooController中的动作呈现grails-app/views/foo/bar .gsp.

如果您有一个逻辑分支,例如在保存操作中,成功的结果后面是重定向到show动作,但是失败结果会导致重新呈现编辑页面,并显示先前的值和错误,可以使用简单的if/else,例如

if (successful) {
   redirect ...
}
else {
   render ...
}
Run Code Online (Sandbox Code Playgroud)

或者你可以提前返回,例如

if (successful) {
   redirect ...
   return
}

render ...
Run Code Online (Sandbox Code Playgroud)

所以你看到的是将这两行合并为一条:

if (successful) {
   return redirect ...
}

render ...
Run Code Online (Sandbox Code Playgroud)

这有点像黑客,因为它暗示你正在返回什么redirect(或其他一些void方法)返回,但你只是没有返回任何东西.它有效,但它有效,但我的偏好是将return语句保持在自己的行上,因为对于发生的事情没有任何歧义.