场景化表单验证

    上一篇文章介绍了如何使用 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”,密码随意。看到注册失败。

转载于:https://my.oschina.net/ta8210/blog/754082

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值