所以我有一个带有重置(删除一些数据),索引和其他方法的控制器,所以在重置方法结束时我有一个重定向到索引方法。 有什么区别:
redirect(action: "index", id: params.id)
redirect(action: index, id: params.id)
第一个完美地工作,在索引方法中重定向我,但第二个重定向我在一个不同的方法。(getEndMonthsList
这是控制器中的最后一个方法)
答案 0 :(得分:2)
您在Grails 2之前显示的两个变体是有效的,因为只有闭包可用于定义操作。所以你可以重定向到'index'或index
,因为你用第二种方法引用了closure属性,而Grails会从它的名字构建完整的URL。它稍慢,所以最好使用String方法。
在2.0中,事情发生了变化,允许将方法用作行动,并且是首选方法。因此,如果你有一个index
方法,它不再是类中可以引用的公共字段,就像任何其他变量一样,它是一个不能直接通过名称引用的方法。所以字符串方法是唯一有效的方法。
我尝试使用非字符串方法来重现这一点,但它并没有按照你描述的方式失败,当索引操作被定义为一个方法(如预期的那样)并且在它被定义为一个闭包(再次,如预期的那样)。
答案 1 :(得分:0)
在第一种情况下,Grails按名称调用控制器方法。 在第二种情况下,Grails获取闭包名称并按名称调用控制器方法。
请参阅org.codehaus.groovy.grails.web.metaclass.RedirectDynamicMethod#establishActionName