美文网首页Java&Spring基础技术JFinal极速开发Java学习笔记
JFinal3.0快速上手,Validator组件(十六)

JFinal3.0快速上手,Validator组件(十六)

作者: 葉糖糖 | 来源:发表于2017-04-03 16:39 被阅读1041次

    一般在正规Web的项目开发中,程序员除了会在前端页面通过JavaScript在表单提交之前验证数据的合法性之外,还会在服务端进行(后台)数据合法性的校验。这样做的好处是可以保证程序的安全以及健壮性。

    去年在注册某知名开发者社区的时候,无意间发现该社区对表单数据的合法性校验只在前端进行了处理。其后果,让人想想也是后怕。

    今天我们共同来学习Jfinal中的Validator组件,使用这个组件可以很方便的在后台实现对表单数据的合法性验证。

    一、数据验证要做什么,实现什么效果

    本小节要实现的目标就是验证表单中的用户名和密码必填,如果不填写则给出提示信息,要去用户填写。不过今天不使用JavaScript来做验证,你是否已经有了办法了呢?实现效果如下图:

    验证效果图
    二、从HTML页面开始

    这个表单非常的简单,当用户点击登录按钮的时候,表单会提交数据到程序服务端去进行数据合法性验证。验证的结果有两种:验证通过,验证未通过。在这里我们只需要去处理验证不通过的情况:1、给出贴切的错误提示信息;2、保持数据状态,进行页面跳转(回到提交的页面,从哪里来,回到哪里去)。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>首页</title>
    </head>
    <body>
        <!--使用表单,以post方式提交数据-->
        <form action="login/userLogin" method="post">
            <label>用户名:</label> 
            <input type="text" name="userName" placeholder="请输入用户名"
                   value="${userName!}">
            <!--显示验证信息-->
            <span style="color: red">${userNameMsg!}</span> <br> 
            <label>密   码:</label>
            <input type="password" name="userPass" placeholder="请输入密码"
                   value="${userPass!}">
            <!--显示验证信息-->
            <span style="color: red">${userPassMsg!}</span> <br>
            <button type="submit">登录</button>
        </form>
    </body>
    </html>
    
    三、坐观控制器

    Validator 配置方式与拦截器完全一样,很简便。Demo中仅仅做一个演示,所以最后验证通过之后,返回的是json数据。具体代码如下:

    package morality.business.login.controller;
    
    import java.util.List;
    
    import com.jfinal.aop.Before;
    import com.jfinal.core.Controller;
    import com.jfinal.plugin.activerecord.Db;
    import com.jfinal.plugin.activerecord.Record;
    
    /**
    * @ClassName: LoginController
    * @Description: 用户登录的控制器
    * @author: Yetangtang
    * @date: 2017年2月25日 上午11:10:54
    * @version: 1.0 版本初成
    */
    public class LoginController extends Controller{
        //默认处理方法
        public void index(){
            render("index.html");
        }
        
        /**
         * @author yetangtang
         * @desc用户登录方法
         * @param user_name;user_pass
         */
        @Before(LoginValidator.class)
        public void userLogin(){
            //获取参数方式一
            String name=getPara("userName");
            String pass=getPara("userPass");
            //控制台输出参数信息
            System.out.println(name+pass);
            //获取用户列表
            List<Record> users=Db.find("select * from user ");
            //返回json数据
            renderJson(users);
    
        }
    
    }
    
    
    四、好戏来了,有请Validator上场

    Validator是一个拦截器,它本身是一个abstract的class实现了Interceptor,所以可以把它当做拦截器来使用。验证机制有很多,这里只演示这一种,小伙伴们在使用的时候可以去Validator实现中查看。希望小伙伴们能够灵活自如的运用技能点。

    package morality.business.login.controller;
    
    import com.jfinal.core.Controller;
    import com.jfinal.validate.Validator;
    
    public class LoginValidator extends Validator{
    
        /**
         * 验证规则处理
         */
        protected void validate(Controller c) {
            //验证数据必填,第一个参数是要验证的字段名;
            //第二个参数是错误信息的key
            //第三个参数是要提示的错误信息
            validateRequiredString("userName","userNameMsg","请输入用户名");
            validateRequiredString("userPass","userPassMsg","请输入密码");
        }
    
        /**
         * 验证错误处理
         */
        protected void handleError(Controller c) {
            //保持参数状态
            c.keepPara("userName");
            c.keepPara("userPass");
            //返回到请求页面
            c.render("index.html"); 
        }
    }
    

    PS:非常感谢每位关注我的道友,因为有你们的存在,让自己拒绝拖延。愿大家都能学习的愉快!

    相关文章

      网友评论

      • 智若咸鱼:希望继续更新jfinal 目前都是一些常见入门例子,楼主总结的很好,由浅入深,希望楼主能出更多的经验吧
        葉糖糖:@小飞鱼说 谢谢:no_mouth::no_mouth::no_mouth:

      本文标题:JFinal3.0快速上手,Validator组件(十六)

      本文链接:https://www.haomeiwen.com/subject/npxoottx.html