在grails documentation段实施“拯救”行动有下面的代码片段:Grails - 重定向如何工作?
book.save flush:true
withFormat {
html {
flash.message = message(code: 'default.created.message', args: [message(code: 'book.label', default: 'Book'), book.id])
redirect book
}
'*' { render status: CREATED }
}
另外也需要注意:
在重定向发到HTML的情况下,原始资源和其他格式的状态代码为201(创建)返回。
我很好奇重定向部分和HTML。在代码中有域对象(书)作为参数传递给重定向方法。执行后,我们被重定向到保存的书的详细信息。
我想,上面的重定向代码就相当于:
redirect(action: "show", id: book.id)
那么如何的Grails知道什么是“原产资源”?是否有与响应方法和内容协商相似的行为?
很抱歉,我无法在redirect method documentation找到答案。
当我重定向我看到'之前运行'的println params' [动作:保存,控制器:书]'。所以我很好奇,下一步如何将'save'这个动作替换为'show',因为我现在从未创建实体。例如,为什么它是'表演'而不是'索引'?我知道重定向到'show'的约定,但是当我调用'redirect bookList'时会发生什么? – 2014-10-08 10:59:21
控制器方法在编译时被添加,主要来自'org.codehaus.groovy.grails.plugins.web.api.ControllersApi'。 'public object redirect(Object instance,Object object)'是你在这种情况下调用的那个;在第一个参数中合并代码集“this”(当前控制器)的AST转换,而域类在第二个参数中。从那里你最终会在'org.codehaus.groovy.grails.web.metaclass.RedirectDynamicMethod'完成一些工作,并将它交给'ResponseRedirector'来发送重定向。 – 2014-10-08 12:12:05
谢谢。在调试的第一时间,我跳过了'ControllersApi',感觉到'RedirectDynamicMethod'和'ResponseRedirector'。然后我甚至见过'DefaultLinkGenerator'。所以我忽略了'ControllersApi'中最重要的部分。 – 2014-10-08 12:45:44