本文整理自网络,侵删。
控制器方法必须返回一个revel.Result
, 用来处理响应结果,其接口定义如下:
type Result interface {
Apply(req *Request, resp *Response)
}
revel.Controller
使用以下方法来处理响应结果:
- Render, RenderTemplate - 渲染模板, 传送参数.
- RenderJson, RenderXml - 序列化结构体到 json 或 xml.
- RenderText - 返回一个明文响应.
- Redirect - 重定向到一个控制器方法 或 URL
- RenderFile - 返回一个文件, 一般用于响应文件下载.
- RenderError - 渲染 errors/500.html 模板来返回一个 500 错误.
- NotFound - 渲染 errors/404.html 模板来返回一个 404 错误.
- Todo - 返回一个存根响应(500)
此外,开发者可以自定义revel.Result.
设置状态码/内容类型
每个内建的 Result 都有一个默认的状态码和内容类型,简单的设置相关属性就可以修改这些默认值:
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
做了两件事:
- 添加参数到控制器的 RenderArgs 中, 使用变量的名字作为字典的key.
- 使用传送的参数渲染模板 “views/Controller/Action.html”。
如果不成功 (比如,没有找到模板), 将返回 ErrorResult.
这允许开发人员编写:
func (c MyApp) Action() revel.Result {
myValue := calculateValue()
return c.Render(myValue)
}
在模板中引用变量 “myValue”。这通常比构建一个明确的map更方便,因为在许多情况下,数据将被作为局部变量处理。
相关阅读 >>
更多相关阅读请进入《Revel》频道 >>
Go语言101
一个与时俱进的Go编程知识库。