2012-10-03 76 views
0

所以我有這個控制器與重置(擦除一些數據),索引和其他方法,所以在重置方法結束時,我有一個重定向到索引方法。 之間有什麼區別:Grails重定向動作索引

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

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

第一個作品完美,重定向我的索引方法,但第二個重定向我通過不同的方法(getEndMonthsList這是在controlller的最後一個方法)

+1

什麼版本的Grails? –

+0

Grails的版本:Grails 2.0.0 – ciker001

回答

0

在第一種情況下,Grails通過名稱調用控制器方法。 在第二種情況下,Grails獲取閉包名稱並通過名稱調用控制器方法。

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

2

的Grails 2,因爲只有關閉可以用來定義操作之前的兩個變種,你表現出是有效的。因此,您可以重定向到'索引'或index,因爲您使用第二種方法引用閉包屬性,並且Grails將從其名稱構建完整的URL。它稍慢,因此儘管使用String方法總是更好。

2.0改變了一些東西,方法被允許用作動作,並且是首選的方法。所以如果你有一個index方法,它不再是類中的公共字段,你可以像其他任何變量一樣引用它,它是一種不能直接按名稱引用的方法。所以字符串方法是唯一可行的方法。

我試圖使用非字符串方法來重現這一點,但它沒有以你描述的方式失敗,當索引動作被定義爲一個方法(如預期的)時它失敗了一個丟失的屬性異常,並且工作正常當它被定義爲封閉(再次,如預期)。