文档章节

场景化表单验证

哈库纳
 哈库纳
发布于 2016/10/01 16:47
字数 806
阅读 142
收藏 3

    上一篇文章介绍了如何使用 Hasor 表单验证功能(https://my.oschina.net/u/1166271/blog/754087)那么这一篇文章特意讲一下场景化表单验证。

什么是场景化验证?

    场景化验证主要是指针对同一个表单对象,在不同场景下的不同表单验证逻辑。在上一篇文章中我们设计的场景是登录。那么在这一篇文章中,我们在考虑一下用户注册。

    用户登录、用户注册。两组表单的数据基本是一致的,可以直接拿来复用。数据模型上注册场景下密码的输入可能会有两个。

    验证逻辑上,登录场景下需要时候验证需要验证帐号密码是否正确。而帐号注册场景下需要检测是不是出现了重复帐号。

    如果没有场景化表单验证,那么我们需要建立两套几乎一摸一样 FormBean 分别对应登录表单和注册表单。虽然可以通过抽象共通的基类来减少重复开发,但是两个 FormBean 的子类的产生无疑也是一种浪费。

    场景化表单验证就是为了解决这个问题而诞生的,它在解决这个问题时,甚至还帮助你少写了更多的代码。简化了更多的开发工作。

使用场景化表单验证

    第一步,设计一个两个场景下通用的 FormBean,顺便我们建立表单和验证器之间的关系。

@ValidBy(LoginFormValidation4Scene.class)
public class LoginForm4Scene {
    @ReqParam("email")
    private String email;
    @ReqParam("account")
    private String account;
    @ReqParam("password")
    private String password;
    ...
}

    第二步,然后编写我们的表单验证器,下面是完整的例子代码:

public class LoginFormValidation4Scene implements Validation<LoginForm4Scene> {
    @Inject
    private UserDao userDao;
    //
    // - 登录验证
    private void doValidLogin(LoginForm4Scene dataForm, ValidErrors errors) {
        String account = dataForm.getAccount();
        String password = dataForm.getPassword();
        UserInfo userInfo = userDao.queryUserInfoByAccount(account);
        if (userInfo == null) {
            errors.addError("login", "登陆失败,不存在的帐号。");
            return;
        }
        if (!StringUtils.equalsIgnoreCase(password, "pwd")) {
            errors.addError("login", "登陆失败,密码错误。");
            return;
        }
    }
    // - 注册登录
    private void doValidSignUp(LoginForm4Scene dataForm, ValidErrors errors) {
        UserInfo userInfo = this.userDao.queryUserInfoByAccount(dataForm.getAccount());
        if (userInfo != null) {
            errors.addError("signup", "帐号已经被使用,请换一个注册。");
        }
    }
    //
    public void doValidation(String validType, LoginForm4Scene dataForm, ValidErrors errors) {
        // -通用验证逻辑
        if (StringUtils.isBlank(dataForm.getAccount())) {
            errors.addError("account", "帐号为空。");
        }
        if (StringUtils.isBlank(dataForm.getPassword())) {
            errors.addError("password", "密码为空。");
        }
        if (!errors.isValid()) {
            return;
        }
        // -场景化差异
        if (StringUtils.equalsIgnoreCase("signup", validType)) {
            this.doValidSignUp(dataForm, errors);   // 注册
            return;
        }
        if (StringUtils.equalsIgnoreCase("login", validType)) {
            this.doValidLogin(dataForm, errors);    // 登录
            return;
        }
    }
}

    在上面的场景化表单验证例子中我们使用了“validType”参数进行判断场景。validType参数的值是由 @Valid注解提供的。下面我们改一下 Controller 为 Valid 注解增加参数,如下面例子:

@MappingTo("/scene/login.do")
public class Login4Scene {
    public void execute(@Valid("login") @Params LoginForm4Scene loginForm, RenderData data) {
        ...
    }
}

    怎么样?表单的场景化验证是不是很酷炫。

    最后我们看一下整个执行效果。

    1.初始化页面

    2.在什么也不填的情况下点击登录会提示帐号密码为空。

    3.输入错误的帐号,提示帐号不存在。

    4.输入正确的帐号和密码“帐号:zyc,密码:pwd”登录成功,显示 “Hello You!”

    5.在注册场景下帐号填写“zyc”,密码随意。看到注册失败。

© 著作权归作者所有

共有 人打赏支持
哈库纳

哈库纳

粉丝 959
博文 83
码字总数 149741
作品 4
杭州
后端工程师
Hasor-2.4.3 发布,使用表单验证

Hasor 2.4.3 正式发布了,Hasor 是一款基于 Java 语言的应用程序开发框架,它的核心设计目标是提供一个简单、且必要的环境给开发者。开发者可以在此基础上,通过 Hasor 强有力的粘合机制,构...

哈库纳
2016/08/19
1K
2
ASP.NET MVC 2 模型验证

【原文地址】ASP.NET MVC 2: Model Validation 【原文发表日期】 Friday, January 15, 2010 4:14 AM 【除了写博客外,我现在还使用Twitter发短贴和共享链接。请通过twitter.com/scottgu跟随我...

酱哥哥
2012/05/24
0
0
nice Validator 0.7.0 发布,jQuery 智能表单验证

简单、智能、令人愉悦的表单验证方案。内置强大的验证机制,适用于各种简单和复杂的应用场景。 支持自动初始化,完全不用写js也可以验证表单。 支持主题机制,多规则绑定,事件驱动,国际化。...

JonyZhang
2014/01/20
2.9K
16
单点登录实现思路

2015/9/22 22:35:50 通常 我们使用单点登录的场景 是多个应用 需要共享用户的基础信息和登录状态 2015/9/22 22:37:07 多个应用 需要考虑到 这样几种情况 1. 同一主域名 2. 跨域名 2015/9/22 ...

思维80
2015/09/26
161
0
nice Validator 0.2.0发布,jQuery智能表单验证

简单、智能、令人愉悦的表单验证方案。 支持自动初始化,完全不用写js也可以验证表单。 支持主题机制,多规则绑定,事件驱动,国际化支持。 支持主流浏览器(IE6+、Chrome、Firefox、Opera、...

JonyZhang
2013/07/21
3.4K
19

没有更多内容

加载失败,请刷新页面

加载更多

下一页

[雪峰磁针石博客]软件测试专家工具包1web测试

web测试 本章主要涉及功能测试、自动化测试(参考: 软件自动化测试初学者忠告) 、接口测试(参考:10分钟学会API测试)、跨浏览器测试、可访问性测试和可用性测试的测试工具列表。 安全测试工具...

python测试开发人工智能安全
今天
2
0
JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
2
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
68
8

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部