Hello World

本文通过快速实现“Hello World”应用程序,你也可以从 the Play! example 上运行 “Hello World” 应用程序。

我们从之前创建的myapp 项目开始,编辑 app/views/App/Index.html模板, 添加下面的表单:

  1. <form action="/App/Hello" method="GET">
  2. <input type="text" name="myName" /><br/>
  3. <input type="submit" value="Say hello!" />
  4. </form>

刷新页面,看看我们的改动变化没。

The Say Hello form

让我们尝试提交该表单看看变化。

Route not found

提示出错了,没有找到控制器方法Hello. 让我们为App控制器添加Hello方法 app/controllers/app.go:

  1. func (c App) Hello(myName string) revel.Result {
  2. return c.Render(myName)
  3. }

下一步, 我们创建一个视图(模板文件). 创建一个 app/views/App/Hello.html文件, 内容如下:

  1. {{set . "title" "Home"}}
  2. {{template "header.html" .}}
  3. <h1>Hello {{.myName}}</h1>
  4. <a href="/">Back to form</a>
  5. {{template "footer.html" .}}

刷新页面,你会看到一个问候:

Hello Robfig

最后,让我们添加一些验证。该名称应要求至少有三个字符。

我们需要使用 验证模块. 编辑 App 控制器的 Hello 方法 app/controllers/app.go:

  1. func (c App) Hello(myName string) revel.Result {
  2. c.Validation.Required(myName).Message("Your name is required!")
  3. c.Validation.MinSize(myName, 3).Message("Your name is not long enough!")
  4. if c.Validation.HasErrors() {
  5. c.Validation.Keep()
  6. c.FlashParams()
  7. return c.Redirect(App.Index)
  8. }
  9. return c.Render(myName)
  10. }

现在可以保存用户名并返回到 Index页面了,如果没有输入有效的名称,那么名字和验证错误都保存在 Flash, 这是一个临时的cookie。flash.html 模板会显示错误或提示信息。

  1. {{if .flash.success}}
  2. <div class="alert alert-success">
  3. {{.flash.success}}
  4. </div>
  5. {{end}}
  6. {{if or .errors .flash.error}}
  7. <div class="alert alert-error">
  8. {{if .flash.error}}
  9. {{.flash.error}}
  10. {{end}}
  11. {{if .errors}}
  12. <ul style="margin-top:10px;">
  13. {{range .errors}}
  14. <li>{{.}}</li>
  15. {{end}}
  16. </ul>
  17. {{end}}
  18. </div>
  19. {{end}}

当验证未通过时,我们希望用户可以重新提交之前对其进行编辑。修改您模板app/views/App/Index.html template:

  1. <form action="/App/Hello" method="GET">
  2. <input type="text" name="" value=""/><br/>
  3. <input type="submit" value="Say hello!" />
  4. </form>

现在,当我们提交一个字母作为我们的名字:

Example error

成功,我们得到了一个错误提示。输入的内容被带回编辑。