2010-06-05 66 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