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