在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