> 设为首页 加入收藏 关于我们
 
 
首页 新闻 技术 教程 框架 源码 服务中心  
 
 
  合作 MyRSS 博客 wiki 社区
 
信息搜索: 全部网站 easyjf.com
  当前位置:首页-EasyJWeb
人性化的验证(Validate)系统
作者:大峡 来源:  发布时间:2007-08-22
杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)
 

为何要验证(Validate)
   验证是系统中一个必不可少的部分,前端验证、后台验证中起来往往会发现,一个简单完整的CRUD应用中,用来处理与验证有关的代码或配置就占了几乎三分之一。Struts1.x时代的验证就不提了。不管是Struts2(webwork)的验证还是JSF里面提供的验证,都是采用按步就班的方式,一笔一划的写出来,仍然没有达到能使验证工作变得简单、灵活。

如何验证
  EasyJWeb完善了验证系统,使验证变得更加容易,灵活控制。你可以使用非常简单的标签或配置就能使系统拥有服务器端及客户端验证的功能。
  这里使用一个简单的示例来介绍。有一个Person模型,如下所示:
  包含id、name、sex、borndate、height、mail、homepage等几个属性。

  假如我们要让name、sex、heigth、borndate必填,并且borndate必须在1908到2008年之间, mail属性只接收正确的email信息,homepage必须接收url信息。则我们只需要在Domain对象(可以是Entity对象,也可以是传输Command对象)中加入下面的配置信息即可:

 

@FormPO(name="person",validators={@Validator(name="required",field="name,sex,heigth,borndate"),@Validator(name="range",field="borndate",value="min:1908-01-01;max:2008-01-01"),@Validator(name="email",field="mail"),@Validator(name="url",field="homepage")})
public class Person{
private Long id;
private String name;
private String sex;
private String mail;
private Integer heigth;
private Date borndate;
public String homepage;
//setter及getter方法
}



不需要进行复杂的配置,只需要使用符合人类语言习惯的简单标注,就能实现所需要的验证业务逻辑。
  @Validator验证标签的使用非常灵活,你只要具有充分的想像力,就能描述出符合特定需要的验证逻辑。比如上面的例子中,我们规定name不允许为空,字符数最小不能少于5个,最大不能超过10个,在进行字符验证前需要清除掉前后的空格。则我们可以使用下面的验证标签:
  

@Validator(name=”string”,value=”blank;trim;required;min:5;max:10;minMsg:最少不能少于5个字符;maxMsg:最大不能超过10字符”)
  
private String name;

错误信息的显示
在表示层的页面模板中,我们可以使用下面的模板标签来显示验证错误信息,
$!errors-显示全部验证错误信息。
$!errors.name-显示name属性(字段)的错误信息。
如下面的的Form

<form name="person_new_form" id="person_new_form" method="post" action="/ejf/person/create">
请输入姓名:
<input name="name" type="text" id="person_name" value="$!name" />$!errors.name
电子邮箱:
<input name="mail" type="text" id="person_mail" value="$!mail" />$!errors.mail

3、统一的验证标签@Validator

public @interface Validator {
 
public String name();// 验证器的名称,如required,string,range等
 public String value() default "";// 验证器的值,使用;号作为分隔符存放各个参数。如value="required;min:5;max:20"
 public String msg() default "";// 默认错误提示信息,当验证无法通过时显示的提示信息
 public String field() default "";// 字段名称,对于property及field类型的校验均可用,也是错误对象的主属性名称。可以用于多个字段,此时需要使用,隔开
 public String displayName() default "";// 定义对象的显示名称,默认情况下为field的名称,可以通过@Field中的name属性定义。
 public ValidateType type() default ValidateType.Property;// 校验类型,默认是对属性进行校验
 public boolean required() default false;// 是否必填字段,每个验证器都可以通过设置属性required=true来指定该属性为必填项
 public String key() default "";// 多国语言显示值的编码
}

 

4、EasyJWeb内置的Validator验证器
  Validators.RequiredValidator-用来定义必填属性,预定义名称required。
  Validators.StringValidator-字符串验证器,定义字符串的属性,预定义名称string。
  Validators.URLValidator-URL字符串验证器,匹配一个合法的URL,预定义名称url。
  Validators.RegexpValidator-正则表达式验证器,匹配指定条件的正则表达式,预定义名称regex。
  Validators.EmailValidator-Email字符验证器,匹配正确的email字符串,预定义名称email。
  Validators.RangeValidator-范围验证器,用来限制属性必须在指定的范围之内,预定义名称range。

  验证器引擎的触发也是非常灵活的,如果是普通的CRUD应用或者是基于普通CRUD应用基础上扩展的应用,则在基本的添删改查中会自动调用验证逻辑。
  如果是自定义的Action,可通过调用form.toPo等方法触法验证逻辑。如果是使用IDAO接口进行的调用,则在进行数据持久化之前会调用验证逻辑。

5、自定义验证器
  除了几个内置的验证器以外,EasyJWeb支持用户自定义的验证器。用户自定义的的验证器只需要实现Validator接口,即可注册到系统中使用。Validator的内容如下:

public interface Validator {
 
/**
  * 执行具体的验证操作
  * 
  * 
@param obj
  *            验证目标对象
  * 
@param value
  *            验证值
  * 
@param errors
  *            验证异常信息封装
  
*/

 
void validate(TargetObject obj, Object value, Errors errors); 
 
/**
  * 验证器默认错误信息
  * 
  * 
@return 返回验证器默认的错误提示信息
  
*/

 String getDefaultMessage();
}

  在实际应用中,一般通过使用继承抽象类AbstractValidator来实现自定义的验证器。如下面是最简单验证器Required的实现:

 public class RequiredValidator extends AbstractValidator {
  
public RequiredValidator() {

  }

  
public void validate(TargetObject obj, Object value, Errors errors) {
   
if (value == null)
    addError(obj, value, errors);
   
else if (value instanceof String) {
   }

  }

  
public String getDefaultMessage() {
   
return "{%0}不能为空!";
  }

 }


 

评论】 【加入收藏】 【推荐给朋友】 【字体:  】 【关闭 
 
团队常用资源链接
《EasyJF办公室及联系方式》
《如何参与EasyJF开源工作》
EasyJF协同及版本控制-SVN
《EasyJF团队章程》
《EasyJF团队成员工作手册》
《EasyJF成员名单》
《EasyJF项目列表》
《EasyJF开源基金赞助名单》
 
 
EasyJWeb
EasyJWeb是基于
java技术,应用于
WEB应用程序快速
开发的MVC框架,
框架设计构思来源于国内众多项
目实践,框架旨在借鉴当前主要
流行的开源Web框架(Struts、
JSF、Tapestry 、Webwork),吸
取其优点及精华,利用
Velocity作为模板页面引擎,实
现页面及代码完全分离的MVC开发
取框架。
EasyJF开源CMS
EasyJF开源CMS
有常用CMS系统的
基本功能,另外还
有自动html文件生
成、AJAX级联菜单、积分系统、
权限管理等功能,支持UBB。该论
坛系统使用基于OO的方法设计,
采用多层B/S构架,数据库持久层
使用Hibernate,Web层使用
Struts框架,java代码与页面
完全分离,易扩展。
EasyJF开源博客系统
EasyJF开源博客系
统基本的博客的书
写、博客圈、流量
统计、排名、个人
像册、音乐、专题等功能。支持
自定义模板、静态html文件生成
、服务器集群、权限系统、积分
系统等。系统使用基于OO的方法
设计,采用多层B/S构架,数据库
持久层使用EasyDBO,Web层使用
EasyJWeb框架,java代码与页面
完全分离,易扩展。
EasyDBO
EasyDBO是一个非
常适合中小型软件
数据库开发的数据
持久层框架,系统
参考hibernate、JDO等,结合中
小项目软件的开发实际,实现简
单的对象-关系数据库映射。

友情连接
LUPA开源论坛 Java研究组织(JR)  与JAVA共舞  java视野   Java开源大全   BlogJava      Jdon解道 SpringSide   天乙论坛   CowNew开源团队  AgileJava开源   javathinker   CSDN Java频道  赛迪网Java频道 中国Eclipse社区   Java家   Java中文站 FireFox中锁文网   java天下   ideagrace   解惑

Copyright (C) 2005 EasyJF.com, All Rights Reserved
版权所有 简易java框架网

渝ICP备06004507号 如有意见请与我们联系 Powered by EasyJFramework