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. jeecg中datagrid中获取选定行的字段值

    datagrid代码如下: <t:datagrid name="orderMainList" checkbox="true" pagination=&qu ...

  2. unity, ContentSizeFitter立即生效

    ugui Text上添加了ContentSizeFitter组件后,如果在代码里对Text.text重新赋值,文本框并不会马上改变大小,而是会延迟到下一帧. 如果想立刻生效,需要调用 Text.Get ...

  3. MySQL 自带工具使用介绍

    MySQL 数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具程序,如mysql,mysqladmin,mysqldump 等等,都是大家所熟悉的.虽然有些人对这些工具的功能都已经 ...

  4. [WebGL入门]十八,利用索引缓存来画图

    注:文章译自http://wgld.org/.原作者杉本雅広(doxas),文章中假设有我的额外说明.我会加上[lufy:].另外,鄙人webgl研究还不够深入,一些专业词语,假设翻译有误,欢迎大家指 ...

  5. 星云 Android 开发工具箱

    Toast 工具类: SmartToastUtils.java import android.content.Context; import android.widget.Toast; /** * T ...

  6. nginx 前端调度 对后端的app的生存状态的检测

    # cat hosts.conf #app调试 upstream gl-appsrv_pools { server 10.1x0.2xx.1x0:8040; server 10.x9x.20.208: ...

  7. 菜鸟学Java(二十)——你知道long和Long有什么区别吗?

    Java中数据类型分两种: 1.基本类型:long,int,byte,float,double 2.对象类型:Long,Integer,Byte,Float,Double其它一切java提供的,或者你 ...

  8. 关于RPG游戏结构撰写的相关探索下篇

    如今市面上已经有好几百种免费RPG系统,我们都能够按照自己的需求对此进行扩展与修改.通过选择现有的系统(特别是较有名的),你能够从一个稳定且经过测试的基础开始创 造. 但是之后你需要基于设置和规则对此 ...

  9. MFC中获取命令行参数的几种方法

    在MFC程序中,可以用以下几种方法来获取命令行参数. 为方便说明,我们假设执行了命令:C:\test\app.exe -1 -2 方法一 ::GetCommandLine(); 将获取到 " ...

  10. 8个超炫酷仿苹果应用的HTML5动画

    苹果的产品一直以精美的UI著称,无论是软件应用还是硬件设备.本文主要分享了8个很不错的HTML5动画应用,这些动画正式模仿了苹果的各类应用,有焦点图.钟表.菜单等HTML5应用和jQuery插件,大家 ...