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. Arduino智能小车--仅仅是随便一搞

    在某宝宝买的智能小车,挺精致的,开心的连接上打印机的线,结果port都没有反应, 查了一下发现是少了驱动,博主用的mac os10.12.3 CH34x_Install_V1.4.pkg 安装好之后我 ...

  2. [转]Spring mvc interceptor配置拦截器,没有登录跳到登录页

    <?xml  version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.s ...

  3. postman发送post数据到node.js中

    使用get请求我们很容易的来利用postman来发送数据,但是今天的express在使用postman进行post请求的时候,竟然解析的body是空对象.在网上找了一下果然有解决方法,如下: 因为是P ...

  4. redis 3.2.3的源码安装

    Install necessary packages On CentOS : yum install wget make gcc tcl On CentOS yum install wget make ...

  5. springBoot bean注入

    1.@Component:把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/> 2.@Autow ...

  6. struts2:多模块多配置文件开发

    struts2支持多模块多配置文件开发.下面是一个仅包含两个模块的示范程序,包括财务.仓库模块.它们都有一个“caiwu“的Action,在各自的命名空间下:还有一个从财务转向到仓库的Action. ...

  7. Android 性能优化总结

    App 流畅运行,是用户体验的第一步.App 流程运行,涉及到性能优化,主要涉及到布局优化, 绘制优化,内存泄漏优化,响应速度优化,列表展示优化,Bitmap 优化,线程优化,包大小优化. 布局优化 ...

  8. 绑定sql server数据库的用户与登录名

    服务器重装系统,重新安装上sql server,附加上以前的数据库, 然后以前是每个数据库都有一个登录用于操作该数据库,其他数据库不能操作的, 附加上数据库后该数据库安全性里的用户能看到以前建立好的用 ...

  9. 【iOS XMPP】使用XMPPFramewok(一):添加XMPPFramework(XCode 4.6.2)

    转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/09/3069145.html XMPPFramework GitHub: https://g ...

  10. CFD使用者应当了解的一些事情

    此文适合对象:CFD完全新手,没有流体力学基础,没有数值计算基础,甚至没有计算机基础. 作为一个CFD完全新手,你需要知道的几件事情 1.CFD是拿来用的,不是拿来学的 除非你是搞CFD理论的,比如一 ...