新聞中心
控制器方法必須返回一個Revel.Result, 用來處理響應(yīng)結(jié)果,其接口定義如下:

目前成都創(chuàng)新互聯(lián)公司已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、巴楚網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
type Result interface {
Apply(req *Request, resp *Response)
}
revel.Controller 使用以下方法來處理響應(yīng)結(jié)果:
- Render, RenderTemplate - 渲染模板, 傳送參數(shù).
- RenderJson, RenderXml - 序列化結(jié)構(gòu)體到 json 或 xml.
- RenderText - 返回一個明文響應(yīng).
- Redirect - 重定向到一個控制器方法 或 URL
- RenderFile - 返回一個文件, 一般用于響應(yīng)文件下載.
- RenderError - 渲染 errors/500.html 模板來返回一個 500 錯誤.
- NotFound - 渲染 errors/404.html 模板來返回一個 404 錯誤.
- Todo - 返回一個存根響應(yīng)(500)
此外,開發(fā)者可以自定義revel.Result.
設(shè)置狀態(tài)碼/內(nèi)容類型
每個內(nèi)建的 Result 都有一個默認(rèn)的狀態(tài)碼和內(nèi)容類型,簡單的設(shè)置相關(guān)屬性就可以修改這些默認(rèn)值:
func (c App) Action() revel.Result {
c.Response.Status = http.StatusTeapot
c.Response.ContentType = "application/dishware"
return c.Render()
}
渲染
控制器渲染方法 (e.g. “Controller.Action”), mvc.Controller.Render 做了兩件事:
- 添加參數(shù)到控制器的 RenderArgs 中, 使用變量的名字作為字典的key.
- 使用傳送的參數(shù)渲染模板 “views/Controller/Action.html”。
如果不成功 (比如,沒有找到模板), 將返回 ErrorResult.
這允許開發(fā)人員編寫:
func (c MyApp) Action() revel.Result {
myValue := calculateValue()
return c.Render(myValue)
}
在模板中引用變量 “myValue”。這通常比構(gòu)建一個明確的map更方便,因為在許多情況下,數(shù)據(jù)將被作為局部變量處理。
注意: Revel 通過調(diào)用的控制器方法名來確定使用哪個模板,查找參數(shù)名。因此, c.Render() 只可稱為由操作。
RenderJson / RenderXml
應(yīng)用程序可以調(diào)用 RenderJson 或 RenderXml 并傳送任意類型的變量 (通常是一個 struct). Revel 會使用 json.Marshal orxml.Marshal對變量進(jìn)行序列化操作.
如果 app.conf 配置文件中 results.pretty=true, 將使用 MarshalIndent 進(jìn)行序列化, 生成漂亮的縮進(jìn),方便使用。
重定向
一個輔助函數(shù)是用于生成重定向。它有兩種方式使用:
- 重定向到一個控制器方法(不帶參數(shù)):
return c.Redirect(Hotels.Settings)
這種形式是非常有用的,因為它提供了一定程度的路由類型安全性和獨立性(自動生成URL)。
- 重定向到一個格式化字符串:
return c.Redirect("/hotels/%d/settings", hotelId)
通常用來傳送參數(shù).
它返回 302 (臨時重定向) 狀態(tài)碼.
添加你自己的 Result
下面是一個添加簡單結(jié)果的例子。
創(chuàng)建此類型:
type Html string
func (r Html) Apply(req *Request, resp *Response) {
resp.WriteHeader(http.StatusOK, "text/html")
resp.Out.Write([]byte(r))
}
在一個控制器方法中使用它:
func (c *App) Action() revel.Result {
return Html("Hello World")
}
狀態(tài)碼
每一個Result 都會設(shè)置一個默認(rèn)的狀態(tài)碼,你也可以重新設(shè)置默認(rèn)的狀態(tài)代碼:
func (c *App) CreateEntity() revel.Result {
c.Response.Status = 201
return c.Render()
} 文章題目:創(chuàng)新互聯(lián)Revel教程:RevelResults
網(wǎng)站路徑:http://m.5511xx.com/article/djhiopo.html


咨詢
建站咨詢
