Validator是JFinal框架中的校验组件,在Validator类中提供了我们经常使用的校验方法,而Validator本身实现了Interceptor接口,所以Validator也相当于一个拦截器,详细使用例如以下:

比方登录时检验username和password是否为空,LoginValidator类

package com.tenghu.core.validator;
import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;
/**
* 登录校验器
* @author Arvin
*
*/
public class LoginValidator extends Validator{
@Override
protected void validate(Controller c) {
//校验输入的信息是否为空
validateRequiredString("name", "nameMsg", "请输入username");
validateRequiredString("password", "pwdMsg", "请输入密码");
}
@Override
protected void handleError(Controller c) {
c.render("login.html");
}
}

这样一个简单的登录校验器算是完毕了,接下来该怎么使用呢,非常easy,比方登录时提交的处理方法是login(),使用JFinal提供的@Before注解,就能够使用检验器,例如以下:

@Before(LoginValidator.class)
public void login(){
String username=getPara("name");
String password=getPara("password");
if("admin".equals(username)&&"admin".equals(password)){
renderText("登录成功");
}else{
renderText("登录失败");
}
}

当登录时提交到该方法,首先进入检验器验证提交的字段是否合法,假设不合法,那么校验器返回定义的页面,合法则进入login()方法中继续执行,这里的login()是在实现Controller类中。

在HTML代码中显示错误信息使用EL表达式,输入校验时的第二个变量就可以:

<form action="login" method="post">
username:<input type="text" name="name"/>${nameMsg!''}<br/>
密码:<input type="password" name="password"/>${pwdMsg!''}<br/>
<input type="submit" value="登录"/>
</form>

除了验证值是否为空,还有其它的验证方法,如:

//校验点子邮箱是否正确,这里不用去管验证邮箱的正則表達式,在源码中已经实现
validateEmail("email", "emailMsg", "电子邮箱格式错误");
//验证URL是否正确
validateUrl("url", "urlMsg", "URL错误");
//自己定义正則表達式验证电话号码
<span style="white-space:pre"> </span>validateRegex("phone", "\\b(1[3,5,7,8,9]\\d{9})\\b", "phoneKey", "电话号码格式错误");

这里仅仅是列了两个平时经常使用的,须要其它的能够自己上源码中查看,除了Validator类中的验证,我们也能够自定义类继承与Validator类,编写自己的校验

自己定义校验类,BaseValidator,该类也为抽象类

package com.tenghu.core.validator;
import com.jfinal.validate.Validator; public abstract class BaseValidator extends Validator{
//校验电话号码正則表達式
private static final String phonePattern="\\b(0(\\d{2,3})-\\d{6,9})\\b";
//校验手机号码正則表達式
private static final String mobilePattern="\\b(1[3,5,7,8,9]\\d{9})\\b";
//校验电话手机号码正則表達式
private static final String phoneMobilePattern="\\b((1[3,5,7,8,9]\\d{9})|(0(\\d{2,3})-\\d{6,9}))\\b"; /**
* 校验电话号码
* @param field 校验字段
* @param errorKey
* @param errorMsg
*/
protected void validatePhonePattern(String field,String errorKey,String errorMsg){
validateRegex(field, phonePattern, false, errorKey, errorMsg);
} /**
* 验证手机号码
* @param field
* @param errorKey
* @param errorMsg
*/
protected void validateMobilePattern(String field,String errorKey,String errorMsg){
validateRegex(field, mobilePattern, false, errorKey, errorMsg);
} /**
* 验证电话手机号码
* @param field
* @param errorKey
* @param errorMsg
*/
protected void validatePhoneMobilePattern(String field,String errorKey,String errorMsg){
validateRegex(field, phoneMobilePattern, false, errorKey, errorMsg);
} }

主要的JFinal框架的Validator算是完毕了,初次匝道,说漏了地方,欢迎拍砖

使用JFinal框架中Validator的更多相关文章

  1. jfinal框架新手使用之路及开发心得

    从接触jfinal这个框架到现在差不多也有一个的时间了,因为之前接触的都是像spring ,springMVC,mybatis,struts2,hibernate这种传统,大多数公司都在用的这种框架. ...

  2. 问题:JFinal框架使用FreeMarker渲染视图报错

    本人用的是JFinal-3.4. 问题描述: 在JFinal框架中使用FreeMarker渲染视图时,报 Caused by: java.lang.ClassNotFoundException: fr ...

  3. Hibernate Validator验证框架中@NotEmpty、@NotBlank、@NotNull 的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull的主要使用情况 @NotEmpty  用在集合类上面 @NotBlank   用在String上 ...

  4. jfinal框架教程-学习笔记(二)

    上一节介绍了jfinal框架的简单搭建,这节通过一个小例子了解jfinal的结构和特点 先上图 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table crea ...

  5. jfinal框架教程-学习笔记

    jfinal框架教程-学习笔记 JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...

  6. Jfinal框架是什么框架?适用于什么项目呢?

    Jfinal框架是什么框架?适用于什么项目呢? jfinal 基于spring MVC研发的框架,操作简单.节省代码,适用于所有web项目.适合中小型项目开发.10分钟写出一个页面的增删改查.目前所在 ...

  7. jfinal框架教程

    jfinal框架教程 下面通过一个小例子了解jfinal的结构和特点 1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLAS ...

  8. jfinal框架学习过程

    刚刚学习jfinal,通过一天左右的时间大体上理解了这个框架的用法,我对他的理解是JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速.代码量少.学习简单.功 ...

  9. jfinal框架的初级学习

    1.同strust2,使用jfinal框架首先需要在web.xml配置自己的过滤器(com.jfinal.core.JFinalFilter),并初始化JFinalConfig类. <filte ...

随机推荐

  1. 轻量级跨平台消息传递协议XML-RPC深度解析

    一.引言 实现跨平台通信的协议主要有简单对象訪问协议(Simple Object Access Protocol,SOAP).代表性状态传输(Representational State Transf ...

  2. 开源Math.NET基础数学类库使用(07)一些常用的数学物理常数

    原文:[原创]开源Math.NET基础数学类库使用(07)一些常用的数学物理常数               本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/ ...

  3. iOS经常使用类别

    我们发现,慢慢积累了很多自己写的各种类别的. .今天,无私.张贴 1.NSDateFomatter @interface NSDateFormatter (MyCategory) + (id)date ...

  4. 解决ASP.NET Web API Json对象循环参考错误

    前言 一般我们在开法 ASP.NET Web API 时,如果是使用 Entity Framework 技术来操作数据库的话,当两个 Entity 之间包含导览属性(Navigation Proper ...

  5. Android:ViewPager扩展的具体解释——导航ViewPagerIndicator(有图片缓存,异步加载图片)

    我们已经用viewpager该. github那里viewpager扩展,导航风格更丰富.这个开源项目ViewPagerIndicator.非常好用,但样品是比较简单,实际用起来是非常不延长.例如,在 ...

  6. android 更新实现自己主动

    其主要原理是: 在应用程序启动.取server在版本 , 以下这个是获取当前应用的版本号信息 private void getCurVersion() { try { PackageInfo pInf ...

  7. Codeforces Round #256 (Div. 2)——Multiplication Table

    题目链接 题意: n*m的一个乘法表,从小到大排序后,输出第k个数  (1 ≤ n, m ≤ 5·105; 1 ≤ k ≤ n·m) 分析: 对于k之前的数,排名小于k:k之后的数大于,那么就能够採用 ...

  8. 播放视频的框架Vitamio的使用问题

    曾经用过这个牛逼的框架,后来又任意搞了下.发现播放不了视频了.搞了老半天才搞好,今天又随便整了下,发现又不行了.我勒个插! 如今最终又搞出来了,发现我总是把步骤搞错或少写了些东西 总的步骤: 一:导入 ...

  9. UI设计规范

    iphone\ipad.android UI设计规范对比 http://blog.163.com/leenell@yeah/blog/static/95840991201302210451710/ A ...

  10. codeforces Round #259(div2) E解决报告

    E. Little Pony and Summer Sun Celebration time limit per test 1 second memory limit per test 256 meg ...