一般在正规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:非常感谢每位关注我的道友,因为有你们的存在,让自己拒绝拖延。愿大家都能学习的愉快!