所以我让这个 Controller 带有一个重置(删除一些数据)、索引和其他方法,所以在重置方法结束时我有一个重定向到索引方法。
和有什么区别:
redirect(action: "index", id: params.id)
redirect(action: index, id: params.id)
第一个完美运行,在 index 方法中重定向我,但第二个在不同的方法上重定向我。(
getEndMonthsList
这是 Controller 中的最后一个方法)
最佳答案
您展示的两个变体在 Grails 2 之前是有效的,因为只有闭包可以用来定义 Action 。所以你可以重定向到'index'或index
因为您使用第二种方法引用了闭包属性,而 Grails 将根据其名称构建完整的 URL。它稍微慢一些,所以使用 String 方法总是更好。
在 2.0 中,事情发生了变化,允许将方法用作操作,并且是首选方法。因此,如果您有 index
方法,它不再是类中的公共(public)字段,您可以像任何其他变量一样引用它,它是一种不能通过名称直接引用的方法。所以字符串方法是唯一有效的方法。
我尝试使用非字符串方法来重现此问题,但它并没有按照您描述的方式失败,当索引操作被定义为方法(如预期的那样)并在定义时工作正常时,它失败并出现缺少属性异常作为一个闭包(再次,正如预期的那样)。
关于Grails 重定向操作索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12704117/