【问题标题】:What is the Difference between render and return render in GrailsGrails中的渲染和返回渲染有什么区别
【发布时间】:2015-07-07 18:32:04
【问题描述】:

grails中的以下内容有什么区别:

渲染 xyz

返回渲染 xyz

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

【问题讨论】:

标签: grails


【解决方案1】:

rendervoid方法,所以它没有返回值,返回它的返回值相当于返回null。 Groovy 将不返回任何内容(例如,仅返回一个简单的 return 语句)和返回 null 视为等效,并且控制器操作的返回值被忽略,除非该值是 Map,因为控制器操作的“结果”不一定已返回但已完成的东西。

具体来说,这意味着您可以发出重定向、转发或渲染调用,这些都会触发预期的响应。但是,如果您返回 Map,则推断它是用于渲染 GSP 的模型映射,其名称与控制器视图文件夹中的操作相同,例如FooController 中的 bar 操作呈现 grails-app/views/foo/bar.gsp。

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

if (successful) {
   redirect ...
}
else {
   render ...
}

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

if (successful) {
   redirect ...
   return
}

render ...

所以你看到的是把这两行合二为一:

if (successful) {
   return redirect ...
}

render ...

这有点小题大做,因为它暗示您正在返回 redirect(或其他一些 void 方法)返回的内容,但您什么也没返回。它有效并且有效,但我更喜欢将 return 语句保留在自己的行中,因为对于正在发生的事情没有歧义。

【讨论】:

  • 完美总结。如果 void 方法是方法或闭包的最后一行怎么办?
  • Groovy 在没有显式返回时使用最后一次调用或表达式的结果作为返回值,因此相当于return null
【解决方案2】:

您不需要返回渲染。如果 render 是您方法中的最后一条语句,它应该会自动返回。如果 render 不是你的最后一条语句,你可以在后面加上一个 return 行来强制返回。这个问题是类似的(虽然不一样,但它涉及渲染后返回)https://stackoverflow.com/a/8714846/1410671。我一直看到它写成:

render xyz

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 2015-03-14
    • 2013-03-25
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多