Revel Results


本文整理自网络,侵删。

控制器方法必须返回一个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 做了两件事:

  1. 添加参数到控制器的 RenderArgs 中, 使用变量的名字作为字典的key.
  2. 使用传送的参数渲染模板 “views/Controller/Action.html”。

如果不成功 (比如,没有找到模板), 将返回 ErrorResult.

这允许开发人员编写:

func (c MyApp) Action() revel.Result {
    myValue := calculateValue()
    return c.Render(myValue)
}

在模板中引用变量 “myValue”。这通常比构建一个明确的map更方便,因为在许多情况下,数据将被作为局部变量处理。

阅读剩余部分

相关阅读 >>

Revel 缓存cache

Revel 控制器概要

Revel 计划任务

Revel 部署

Revel results

Revel 拦截器

Revel session flash

Revel 项目结构

Revel 测试

Revel 概念

更多相关阅读请进入《Revel》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...