- 浏览: 1453741 次
- 性别:
- 来自: 青岛人在北京
文章分类
最新评论
-
yhxf_ie:
azheng270 写道 永远是0知道答案了, inser ...
使用MySQL的LAST_INSERT_ID -
yhxf_ie:
insert了还是0... 可能还要设置些什么?
使用MySQL的LAST_INSERT_ID -
一如年少:
123123
Flex使用ribbit.com的服务给手机发送短信SMS -
pointdew:
poincare 写道您好,请教一个问题,如果我的 swf 文 ...
Flex:使用FlexPaper显示PDF文档 -
pointdew:
swf远程加载问题 : flexpaper无法加载http方式 ...
Flex:使用FlexPaper显示PDF文档
写了一个POJO + Annotation来做validation的验证方案。思路就是在POJO里加入Annotation来标注验证条件,以取代validation.xml等验证方式。
先看一下最终的应用效果
public class UserBean { private String userName; private String password; private String email; @SRequired(messageKey = "Name is required.") public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @SRequired(messageKey = "Password is required.") @SLength(min = 6, max = 20, messageKey = "Password is 6 - 20") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @SRegularEx(regex = RegPatterns.EMAIL, messageKey = "Please input a valid email.") public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
public class ValidateTest { public static void main(String[] args) { UserBean user = new UserBean(); List<String> messageList = ValidationUtils.validate(user); for (String s : messageList) { System.out.println(s); } } }
这里只需要在POJO的get方法上加annotation说明验证条件,以及验证失败后的消息(或消息的i18n key)即可,ValidationUtils将收集验证失败的消息并返回。
推荐将annotation加在public getXXX方法上,而不是加在field上。主要原因是
- 这样不会破坏java的public, private等访问限制。
- 加在get方法上更加灵活,你可以验证由几个filed组合而成的一个String是否符合条件
再说一下实现,其实很简单, 像下面这样创建validation annotation
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD}) public @interface SLength { String messageKey() default ""; int max() default 255; int min() default 0; }
这里SLength的默认范围是 0-255 基本符合大部分项目的需求。
在ValidationUtils中先找出POJO的所有method,然后遍历,取得一个method的返回值,再取出这个method上的所有annotation,遍历这些annotation并找出那些是我们定义的validation annotation,再根据不同的条件分别进行验证。
private static void validateMethods(Object bean, List<String> messageList) { //get all of public methods Method[] publicMethods = bean.getClass().getMethods(); for (Method method : publicMethods) { //ignore if it is not getXXX method if (!isGetterMethod(method)) { continue; } Object value = null; try { value = method.invoke(bean, null); } catch (Exception e) { e.printStackTrace(); } //Annotation[] annotations = method.getDeclaredAnnotations(); Annotation[] annotations = method.getAnnotations(); for (Annotation annotation : annotations) { validateAnnotation(value, annotation, messageList); } } }
private static void validateAnnotation(Object value, Annotation annotation, List<String> messageList) { if (annotation instanceof SRequired) { validateRequired(value, (SRequired) annotation, messageList); } else if (annotation instanceof SLength) { validateLength(value, (SLength) annotation, messageList); } else if (annotation instanceof SRegularEx) { validateRegularEx(value, (SRegularEx) annotation, messageList); } }
在这里大部分的验证都可以通过 SRegularEx annotation 来做,你只需要自行扩展 RegPatterns 类中定义的正则表达式就行了。有特殊需要的话,你可以创建自己的validation annotation,并扩展ValidationUtils.validateAnnotation()方法。
做这个的时候,只是为了验证web form提交,有什么不足的还请大家指点。
- validation.zip (5.5 KB)
- 描述: source
- 下载次数: 194
评论
4 楼
neptune
2008-08-28
我也和你做了一个一样的东西,给你提点见意.
1.把你的Validator Annotation改为metadata Annotation对扩展最好。
2.required不应做为annotation。其注释在pojo中的某个field没有意义。
1.把你的Validator Annotation改为metadata Annotation对扩展最好。
2.required不应做为annotation。其注释在pojo中的某个field没有意义。
3 楼
stworthy
2008-08-27
这只能在WEB环境中进行,脱离WEB就只能得到key而得不到具体的message了。
2 楼
wangcheng
2008-08-27
可以在annotation的messageKey里写i18n的message key,
验证完后,得到了error message 的 i18n key 就随你怎么处理了。
用JSTL也行,在Action里处理也行。
验证完后,得到了error message 的 i18n key 就随你怎么处理了。
用JSTL也行,在Action里处理也行。
1 楼
stworthy
2008-08-27
请问这样的国际化如何解决?
发表评论
-
实时监控服务器的工具
2011-06-24 10:37 1487http://newrelic.com/ h ... -
设置Tomcat的JAVA_OPTS参数
2011-06-23 14:17 38917修改 TOMCAT/bin/catalina.bat 添加s ... -
PD4ML将Html导出PDF
2011-04-21 22:34 2265http://pd4ml.com/ 可以通过命令行,或 ... -
Google Data Centers List for SEO
2010-08-18 10:00 1717爬取Google的数据,有时被Block,可以让程序随机跳换I ... -
Google AuthenticationException: 403: Invalid AuthSub token
2010-08-06 23:04 2412给客户的网站做了Google Authentication认证 ... -
JavaMail配置SSL服务器及安装证书
2010-02-26 17:40 25370客户给的邮件服务器要SSL,使用Spring的JavaMail ... -
使用apache-cxf-2.2.5生成WebService客户端时List属性没有Setter方法
2010-01-25 14:14 7386用apache-cxf-2.2.5来生成Google Adwo ... -
使用Gson将Java对象转换为JSON
2009-12-17 19:55 32143Gson是Google的一个开源项目,可以将Java对象转换成 ... -
从Quartz数据库中删除cron trigger
2009-09-22 12:24 3531要删除quartz的cron类型的trigger,从qrtz_ ... -
解决Spring中使用quartz发生NotSerializableException methodInvoker的问题
2009-09-15 21:52 18039Spring2.5 + quartz1.6.5 发生如下异常 ... -
Hibernate的HQL中使用left join
2009-09-02 12:50 7995业务为: 消费者 - 订单 - 所购产品 - 产品评论 ... -
htmlparser在分析RemarkNode注释时的bug
2009-07-29 22:44 2892在使用 htmlparser1.6 分析一段Html时发现 ... -
Java查询获取Google PageRank
2009-06-19 11:44 3606Java代码如下 import java.net.UR ... -
Eclipse快捷键
2009-06-12 15:49 1344Eclipse 快捷键 Ctrl + Shift + ... -
使用TCPMonitor监控WebService SOAP消息
2009-05-11 16:13 10180使用Apache axis的TCPMonitor可以监控Web ... -
在EJB3的WebService方法中获取HttpServletRequest对象
2009-04-16 17:18 3313在EJB3写的WebService中获取HttpServlet ... -
修改server.xml文件从外网访问JBoss
2009-04-15 21:55 6453从外网访问JBoss,可以加启动参数 run -b 0.0.0 ... -
通过IP访问JBoss失败的问题
2008-10-29 16:04 2094用WTP启动JBoss,通过IP访问JBoss Server ... -
禁用Eclipse的Subclipse插件
2008-09-05 12:06 4499要禁用Eclipse的Subclipse插件 Help - ... -
在JBoss中调用WebService出org.jboss.ws.WSException
2008-07-23 19:49 4222使用jboss-4.2.2.GA,在调用remote web ...
相关推荐
annotation.jar eclipse插件,根据数据库自动生成pojo
POJO In action 代码 POJO In action 代码 POJO In action 代码
POJO转Map代码,POJO转Map代码POJO转Map代码POJO转Map代码
SSM笔记-POJO,测试POJO,SpringMVC会根据请求参数名和POJO类的属性名自动匹配为对应对象填充值
netty pojo netty pojo替换 channelbuffer
Mybatis pojo插件生成工具 把包下载下来,配置到eclipse中,project new 可以看到mybatis插件已经安装好
POJO javaBean EJB JNDI 理解及区别
参照https://github.com/joelittlejohn/jsonschema2pojo/wiki/Getting-Started的步骤Using jsonschema2pojo within your Java project (embedded)
1.1.1版本 简单数据库逆向工程 自动生成POJO类 JAVA WEB jsp
当我们从数据库读出数据得到ResultSet... 这里面还有一段代码,是把数据库结果集封装到Map代替pojo,有些人也许认为不符合OO思想,但是这还没有成为一个定论,而且Map和List,在迭代时的效率非常高,我认为值得这样去做
hibernate生成pojo
本资源为博客中ssm项目实战第二天需要用到的pojo类的压缩包,包含该项目所有的pojo类
This is a easy POJO class!
IDEA自带的插件Generate POJOs.groovy 比较简陋,不能生成完整的dao/mapper,切生成的POJO没有注解。没有统一格式化,所以在此基础上进行了扩展能够简单的生成pojo/dao/mapper. 使用时选择目录后会在改目录下生成...
超级简单好用的代码生成器,解压后先看看readme 运行时,填入列名和java中的属性类型后点击生成, 就可以生成一个pojo.java文件,不需要手写了 原理也很简单,作为想复习j2se知识的同学来说也很实用哦!
保存资源,以后开发备用,数据表生成pojo,java代码。
jsp上使用object[]看不懂吧?写vo太烦琐了?ok,都交给map吧、本工具类的使命就是让map代替所有的vo,让编程变得更美好。 附有详细的使用例子。 java精英团队十年编程精华。
超级POJO程序设计方言.rar超级POJO程序设计方言.rar超级POJO程序设计方言.rar超级POJO程序设计方言.rar超级POJO程序设计方言.rar超级POJO程序设计方言.rar超级POJO程序设计方言.rar超级POJO程序设计方言.rar超级POJO...
利用Mybatis逆向工程来生成pojo,dao和mapper。然后将pojo实体类和dao拷贝到工程当中。这样可以快速地实现数据库的开发
文档主要介绍pojo与javaBean的区别