Grails重定向操作索引



所以我有一个带有重置(擦除一些数据)、索引和其他方法的控制器,所以在重置方法结束时,我重定向到索引方法。之间的区别是什么

redirect(action: "index", id: params.id)
redirect(action: index, id: params.id)

第一个非常有效,在index方法中重定向,但第二个在不同的方法中重定向。(getEndMonthsList是控制器中的最后一种方法)

您展示的两个变体在Grails 2之前是有效的,因为只有闭包可以用来定义操作。因此,您可以重定向到"index"或index,因为您使用第二种方法引用了闭包属性,Grails将根据其名称构建完整的URL。它稍微慢一点,所以使用String方法总是更好的。

在2.0中,事情发生了变化,方法被允许用作操作,这是首选方法。因此,如果你有一个index方法,它不再是类中的一个公共字段,你可以像任何其他变量一样引用它,它是一个不能直接通过名称引用的方法。因此字符串方法是唯一有效的方法。

我试图使用非字符串方法来重现这一点,但它并没有像您描述的那样失败,当索引操作被定义为方法时(正如预期的那样),它以缺少属性异常而失败,当它被定义为闭包时(同样,正如预期的一样),它运行良好。

在第一种情况下,Grails通过名称调用控制器方法。在第二种情况下,Grails获取闭包名称并按名称调用控制器方法。

参见org.codehaus.groovy.grails.web.metaclass.RedirectDynamicMethod#establishActionName

最新更新