在我的save
操作结束时,我会重定向到这样的show
操作:
redirect(action: "show", id: exampleInstance.id)
在我的show
操作中,我希望能够检测是否有人通过网址直接进入此操作,或者是否将其从另一个操作重定向到此处。我尝试request.isRedirected()
但它总是返回false
。
如何检测我是否因为来自其他操作的重定向而处于某个操作中?
答案 0 :(得分:1)
我想您要显示确认消息。 Grails有这种用例的内置功能:
http://www.grails.org/doc/2.1.0/ref/Controllers/flash.html
看看这个例子:
class BookController {
def save() {
flash.message = "Welcome!"
redirect(action: 'home')
}
}
在视图中,您可以打印或查看flash.message
。
答案 1 :(得分:0)
理论上,isRedirect检查请求属性。它相当于
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes
if(request.getAttribute(GrailsApplicationAttributes.REDIRECT_ISSUED) != null){
println "request was redirect"
}
直接尝试并告诉我会发生什么。
答案 2 :(得分:0)
在Grails源代码中,isRedirected()
仅适用于save
操作,因为它在redirect()
方法逻辑中设置,因此不会在show
行动。
相反,这里有一些手动选项。一种是向flash
对象添加一个标志,然后在重定向操作中对其进行测试。由于它在闪存范围内,因此将在show
操作结束时清除:
def save() {
// Do stuff
flash.redirectFrom = "save"
redirect(action:"show")
}
def show() {
if (flash.redirectFrom) {
// Respond to redirect
}
// Do other stuff
}
另一个选择是发出chain()
调用而不是redirect()
并测试隐式chainModel
对象。从外部URL请求chainModel
操作时,show
将不存在:
def save() {
// Do stuff
chain(action:"show",model:[from:'show'])
}
def show() {
if (chainModel) {
// Respond to redirect
}
// Do other stuff
}