2010-06-05 67 views
5

基本上我有兩個關於grails過濾器的問題。關於grails過濾器的問題

  1. 根據Grails的文檔,你可以這樣做下面的過濾器
if (userId != paramsUserId) { 
    flash.message = "You can only modify yourself" 
    redirect(action: 'list') 
    return false 
} 

如果上述條件爲真,那麼如何將return語句得到執行?

  1. 我可以在我的過濾器中重定向到一個也有重定向的動作嗎?

回答

6

1 - 從過濾器中返回false可防止進一步的過濾器(以及在過濾器之前的動作)執行。瀏覽器將獲得302重定向並轉到您要求重定向到的「列表」方法。

http://grails.org/doc/2.3.7/guide/single.html#filterTypes

2 - 是的。重定向到其他重定向的東西很好。它對瀏覽器真的沒有關係。如果你用螢火蟲看它,你會看到真正的重定向。當您重定向瀏覽器接收到HTTP狀態碼爲302(「發現」)的響應時,此響應還包括瀏覽器接下來請求的url(您重定向到的URL,即「列表」方法在上面的例子中)。然後瀏覽器請求該URL並且它的行爲就像是第一個請求一樣。

這就是爲什麼Flash範圍如此有用,閃存範圍內的事情直到下一個請求才會生效,因此它們跨越重定向。

+0

對於一些servlet容器(如Tomcat),您必須小心發送太多的重定向。 – Blacktiger 2010-06-07 14:13:25