Results
使用以下方法来处理响应结果:
- Render, RenderTemplate - 渲染模板, 传送参数.
- RenderJson, RenderXml - 序列化结构体到 json 或 xml.
- RenderText - 返回一个明文响应.
- Redirect - 重定向到一个控制器方法 或 URL
- 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.
这允许开发人员编写:
注意: Revel 通过调用的控制器方法名来确定使用哪个模板,查找参数名。因此, c.Render() 只可称为由操作。
应用程序可以调用 或 RenderXml
并传送任意类型的变量 (通常是一个 struct). Revel 会使用 or 对变量进行序列化操作.
如果 app.conf
配置文件中 results.pretty=true
, 将使用 进行序列化, 生成漂亮的缩进,方便使用。
一个辅助函数是用于生成重定向。它有两种方式使用:
- return c.Redirect(Hotels.Settings)
- 重定向到一个格式化字符串:
通常用来传送参数.
它返回 302 (临时重定向) 状态码.
下面是一个添加简单结果的例子。
创建此类型:
- type Html string
- func (r Html) Apply(req *Request, resp *Response) {
- resp.WriteHeader(http.StatusOK, "text/html")
- resp.Out.Write([]byte(r))
- }
每一个Result 都会设置一个默认的状态码,你也可以重新设置默认的状态代码:
- func (c *App) CreateEntity() revel.Result {
- c.Response.Status = 201
- }