jfinal 初体验 Validator(十)

一般在正规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"); 
    }
}



作者:葉糖糖
链接:https://www.jianshu.com/p/273d55b3d1da
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自blog.csdn.net/u014756827/article/details/81200462