在我的grails方法中,我将 View 重定向到另一个。代码如下所示:
def method_1 (){
redirect action: "act1", params: [param1: 'Hi']
}
现在,从我的Filter类中,我想检测到
method_1
负责调用act1
过滤
myFilter(controller:'Person', action:'act1') {
before = {
if (!request.getHeader("referer").contains('/Person/method_1') ) {
redirect(action: 'Can't view this')
return false
}
}
}
}
在这种情况下,
request.getHeader("referer")
返回NULL。那么,如何找出哪个action
称为act1
呢?更新
println request.getRequestURI
println request.getRequestURL
println request.getContextPath
println request.getPathInfo
println request.getServletPath
request.forwardURI
最佳答案
一种解决方法是在flash
中放入一些状态:
def firstAction (){
flash.foo = 'firstAction'
redirect action: "secondAction", params: [param1: 'Hi']
}
def secondAction() {
if('firstAction' == flash.foo) {
// do whatever you need to do
}
// ...
}
当您将某些内容放入
flash
时,该内容将保留在该请求的其余部分以及1个后续请求中,然后再清除。这对于在重定向期间保留数据很有用,因为重定向将触发第二个请求,并且您希望数据在下一个请求期间可用,但此后不可用。