Revel提供了内建函数用于验证参数。它提供了:

一个`Validation`上下文集合来管理验证错误信息(键与消息内容)
辅助函数用于检查数据并将错误信息放入上下文
一个模板函数用于从`Validation`上下文以键的方式获取错误信息

##内嵌错误信息
这个例子演示了字段验证与内嵌错误信息:

func (c MyApp) SaveUser(username string) revel.Result {
// Username 参数必须是4~15个长度,名且匹配正则 ^\\w*$
c.Validation.Required(username)
c.Validation.MaxSize(username, 15)
c.Validation.MinSize(username, 4)
c.Validation.Match(username, regexp.MustCompile("^\\w*$"))

if c.Validation.HasErrors() {
// 存储参数与异常信息至flash,并重转向
c.Validation.Keep()
c.FlashParams()
return c.Redirect(Hotels.Settings)
}

// All the data checked out!
...
}

整个步骤如下:

1、验证`username`必须符合四种情况(必填、最长15个、最少4个,匹配正则)

2、每一次验证返回一个`ValidationResult`对象,失败的`ValidationResult`存储在`Validation`上下文

3、在构建项目时,revel会记录每个需要验证参数的变量名,并且将它作为默认的`validation`上下文中的key

4、`Validation.HasErrors()` 如果`validation`上下文包含错误信息,则返回`true`

5、`Validation.Keep()`使`ValidationErrors`错误信息写入flash cookies

6、重定向至`Hotels.Settings`

`Hotels.Settings`会渲染如下模板:

{{/* app/views/Hotels/Settings.html */}}
...
{{if .errors}}Please fix errors marked below!{{end}}
...

Username:

{{.errors.username.Message}}

它做了3个事:
1、检查错误信息map中`username`键是否存在错误

2、使用`username`中的值预填充input标签

3、在input标签下面显示错误信息。

##顶部的错误信息

错误信息可以被显示在一个固定的地方,这样可以简化错误显示机制。例如,在页面上方有个红色边框的区域显示这些信息。

这与上面的例子有两点不同:

1、我们使用`Message`,而不是`ValidationError`的`Key`

2、我们在表单的上部显示所有错误信息

代码:

func (c MyApp) SaveUser(username string) revel.Result {
// Username 参数必须是4~15个长度,名且匹配正则 ^\\w*$
c.Validation.Required(username)
c.Validation.MaxSize(username, 15)
c.Validation.MinSize(username, 4)
c.Validation.Match(username, regexp.MustCompile("^\\w*$"))

if c.Validation.HasErrors() {
// 存储参数与异常信息至flash,并重转向
c.Validation.Keep()
c.FlashParams()
return c.Redirect(Hotels.Settings)
}

// All the data checked out!
...
}

模板:

{{/* app/views/Hotels/Settings.html */}}
...
{{if .errors}}

    {{range .errors}}

  • {{.Message}}
  • {{end}}

{{end}}
...

Go Revel - Validation(验证)的更多相关文章

  1. 关于脱离laravel框架使用Illuminate/Validation验证器

    1.关于Illuminate/Validation验证器 Validation 类用于验证数据以及获取错误消息. github地址:github.com/illuminate/validation 文 ...

  2. 在系统中使用Bean Validation验证参数

    转自:http://www.importnew.com/18561.html 为什么要使用Bean Validation?  当我们实现某个接口时,都需要对入参数进行校验.例如下面的代码 1 2 3 ...

  3. @Validated和@Valid区别:Spring validation验证框架对入参实体进行嵌套验证必须在相应属性(字段)加上@Valid而不是@Validated

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...

  4. validation验证器指定action中某些方法不需要验证

    今天写代码时,遇到个问题,在一个输入数据的页面有一个按钮,单击会发出请求从数据库中取数据,在这里出现问题,单击该按钮,配置的validation起作用,该请求没有到达后台的action 点击按钮选择作 ...

  5. Jquery Validation 验证控件的使用说明

    转载自:http://blog.csdn.net/huang100qi/article/details/52453970,做了一些简化及修改 下载地址:https://jqueryvalidation ...

  6. s:select下拉框validation验证

    S:select下拉框验证: <td colspan="5"> <s:select name="vo.typeVO.corp" list=&q ...

  7. jquery validation验证身份证号、护照、电话号码、email

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Laravel 中 validation 验证 返回中文提示 全局设置

    <?php return [ /* |-------------------------------------------------------------------------- | V ...

  9. flask修改flask_wtf使其支持json数据的validation验证

    flask默认是前后端不分离策略,前端通过flask+wtf表单来传递post,put...等数据. 现在前后端分离是趋势,那么对flask进行一定的修改,变为前后端分离,在前端页面中请求后端,那么请 ...

随机推荐

  1. 移动硬盘做pe启动盘

  2. pyspark 随机森林特征重要性

    # IMPORT >>> import numpy >>> from numpy import allclose >>> from pyspark ...

  3. unity, ugui toggle, dynamic bool

    假设Canvas_debugControl.cs有一个函数 public void showNextSceneButton(bool value){ ... } 欲将其添加到一个ugui toggle ...

  4. supervisor 完整安装步骤

    Supervisorhttp://www.jianshu.com/p/bf2b3f4dec73http://www.jianshu.com/p/9abffc905645http://blog.csdn ...

  5. elk 的报错和优化

    参数调整 elasticsearch.yml配置文件里面,调整http.max_content_length: 500mb 这个默认就100m 建议调大 之前有过报错 #如果队列满了logstash就 ...

  6. JS location.href跳出框架打开新页面

    后面在框架中,当判断登录失效后要返回登录页面,但登录页面却在框架内打开,我想让它直接跳出框架打开,这里不是打开新窗口. echo "<script language=\"ja ...

  7. Atitit codeblock c++开发环境建立attilax总结

    Atitit codeblock c++开发环境建立attilax总结 1.1. C++的重要意义 1 1.2. 项目ide的选项 1 1.3. 安装MinGW  (基于GCC的C++编译器)  50 ...

  8. [svc][jk]磁盘的iops和吞吐量(Throught)指标

    参考 另参考 IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一.IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处 ...

  9. iOS7相机隐私判断

    转自:http://borissun.iteye.com/blog/1992303 装了iOS7的ip5的隐私设置里多了相机这一项(ip4装iOS7就没有). 如果隐私里把你的app对应的相机给关了, ...

  10. 60.自己定义View练习(五)高仿小米时钟 - 使用Camera和Matrix实现3D效果

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 本文出自:猴菇先生的博客 http://blog.csdn.net/qq_31715429/article/details/546 ...