- 浏览: 156951 次
文章分类
最新评论
-
飘零雪:
[b][/b][i][/i][u][/u]引用
自定义Mave archetype的创建 -
fujohnwang:
<div class="quote_title ...
基于iBatis的开源分布式数据访问层 -
gzenzen:
<pre name="code" c ...
基于iBatis的开源分布式数据访问层 -
fujohnwang:
bornwan 写道我就很想知道分布式数据源,水平切分之后排序 ...
基于iBatis的开源分布式数据访问层 -
fujohnwang:
gzenzen 写道什么时候支持mybatis3、spring ...
基于iBatis的开源分布式数据访问层
Table of Contents
org.springmodules.validation.valang.parser.ValangParser is the key class that will help on this task.
If you are able to construct a valid valang-syntax expression from some other sources, you can use ValangParser to parse these kinds of expressions into Valang's Object model. for example:
Errors errors = ...; Object target = ...; ValangParser parser = new ValangParser("{ <key> : <expression> : <error_message> [ : <error_key> [ : <error_args> ] ]}"); try { Collection<ValidationRule> rules = parser.parseValidation(); if(CollectionUtils.isNotEmpty(rules)) { Iterator<ValidationRule> iter = rules.iterator(); while(iter.hasNext()){ ValidationRule rule = iter.next(); rule.validate(target, errors); } } } catch (ParseException e) { // handle exception here. }
with sample code above, I think you can figure out how the ValangValidator class do its work.
Since you can “setValang(String valang) ”, you can “setCustomFunctions(..) ”, in the “validate(Object target, Errors errors) ” method, the ValangValidator only need use ValangParser to parse the expression set via “setValang(String) ” method. After a collection of ValidationRule is available, the left things is almost the same like code above.
Of course, since ValangValidator use ValangParser to do the parsing things, you can use ValangValidator or its super class, that's, org.springmodules.validation.valang.parser.SimpleValangBased , to do the same thing. I mean, to parse the valang expression.
when I want to add GlobalError support for ROMA framework, I found that as if Valang doesn't support such GlobalError expression things, so I have to find another way.
In a valang-syntax expression, the first token is the <key>, it's mandatory. But for a global error, it's meaningless. so even we provide a dummy <key> value, and make the expression-parsing pass, when we invoke the “#validate(target, errors) ” method of ValidationRule, an exception will still be raised, because, the ValidationRule can't find a property on the target object. In order to fix this, we have to break down the “#validate(target, errors) ” method's logic. Here is what I will do.
If we inspect the type of the ValidationRule returned from “parser.parseValidation() ”, we will find that it's type is org.springmodules.validation.valang.predicates.BasicValidationRule . This is the default value object that hold every part of the parsed Valang expression. Since we can get everything with it, we then can filter the returned collection of ValidationRule. The code seems like:
ValangValidator validator = new ValangValidator(); validator.setValang(""); @SuppressWarnings("unchecked") Collection<ValidationRule> rules = validator.getRules(); @SuppressWarnings("unchecked") Collection<ValidationRule> globalErrorRules = CollectionUtils.transformedCollection(rules, new Transformer() { public Object transform(Object arg) { final BasicValidationRule rule = (BasicValidationRule)arg; return new ValidationRule() { public void validate(Object target, org.springframework.validation.Errors errors) { String errorKey = rule.getErrorKey(); String message = rule.getErrorMessage(); @SuppressWarnings("unchecked") Collection args = rule.getErrorArgs(); if(CollectionUtils.isEmpty(args)) { errors.reject(errorKey, message); } else { @SuppressWarnings("unchecked") Object[] argArray = args.toArray(new Object[args.size()]); errors.reject(errorKey, argArray, message); } } }; } });
since FiledError is added with “#rejectValue(..) ”, we use “#reject(..) ” to fill GlobalError to Errors . After these rules are applied to the target object, the corresponding global errors will be available. You can pull them in you view via spring's RequestContext or other way you resort to.
发表评论
-
基于iBatis的开源分布式数据访问层
2011-03-28 11:46 5539http://code.alibabatech.com/wik ... -
分布式数据访问与同步场景浅析
2010-09-06 19:50 2242分布式数据访 ... -
Netty Framework Tips And Gotchas
2010-08-11 18:01 2666王福强(Darren.W ... -
有关Maven编译DeprecatedAPI失败的问题
2010-08-02 10:59 4473在项目代码里用了sun.misc.Signal ... -
Java Daemon Control
2010-07-27 17:50 2910Java Daemon Control ... -
Event Driven Style API Design Instead of Old Procedure Style Ones
2010-07-12 19:53 1476王福强(Darren.Wang) <f ... -
HA狭义与广义论
2010-07-09 09:25 1466Author: Darren Wang(fujohnwang) ... -
Why We Need A Global ID Generator?!
2010-05-18 13:01 1628Table of Contents 1. Pai ... -
Gotchas With JUnit's Execution Model
2010-03-26 09:22 1055Maybe you have known it before, ... -
Transaction Management Patterns In Brief
2010-02-09 10:27 1763There are several patte ... -
"扩展Spring的依赖注入行为"两例
2009-12-26 12:59 2732扩展Spring的依赖注入行为两例 ... -
框架API设计相关的碎言
2009-11-17 09:32 1614框架的API设计,应该是 ... -
自定义Mave archetype的创建
2009-10-29 20:12 12361Table of Contents ... -
看来有人已经有要抢先推出这个节目的意思了
2009-10-27 19:29 1020这篇blog对java, clojure和scala中的并发处 ... -
Roma Documentation Outline
2009-10-27 17:35 150Roma Docume ... -
Hot Stuff - Lombok
2009-10-22 19:46 1029give it a try, it's really cool ... -
ROMA框架潜在改进点思考(Thinking in ROMA improvements)
2009-10-21 19:53 1931. 关于ROMA现有表单 ... -
ThreadSafety, Non-ThreadSafety 与 Stateless, Stateful有必然的对应关系吗?
2009-10-09 09:11 1862“It depends. ” 我们 ... -
A Big Piture On Concurrency
2009-09-12 09:49 12443- Concurrency Share (Concur ... -
尴尬的COC
2009-08-25 11:04 994Convention Over Configurati ...
相关推荐
BootstrapValidator是一款广泛应用于Web开发的前端验证插件,它基于流行的Bootstrap框架构建,为开发者提供了简单易用的接口来实现表单验证功能。这个插件的主要目标是帮助开发者创建具有美观界面和强大验证功能的...
表单验证控件commons-validator-1.3.1表单验证控件commons-validator-1.3.1表单验证控件commons-validator-1.3.1表单验证控件commons-validator-1.3.1表单验证控件commons-validator-1.3.1表单验证控件commons-...
Struts Validator 是 Apache Struts 框架的一个重要组成部分,它提供了一种方便的方式来验证用户输入数据的有效性。Struts 通过插件(Plugin)机制来集成 Validator 功能,使得开发者可以轻松地在应用中添加数据验证...
`Validator` 在IT行业中通常指的是用于验证数据的工具或框架,它可以确保输入的数据符合特定的规则和格式。在Java世界中,`Validator` 特别指的是JSR 303/JSR 349(Bean Validation)规范的实现,如Hibernate ...
BootstrapValidator是基于Bootstrap框架的一个强大的表单验证插件,版本0.5.3提供了丰富的功能和自定义选项,使得在Web应用中实现高效且美观的表单验证变得简单易行。这个压缩包包含了该插件的js文件和css样式文件,...
Vue Validator是Vue.js框架的一个强大插件,专门用于处理表单验证。它的主要目标是简化在Vue应用中创建和管理复杂表单验证的过程。在本文中,我们将深入探讨Vue Validator的使用方法及其核心特性。 首先,为了使用...
`Validator框架`是Java开发中用于数据验证的重要工具,尤其在基于Struts的Web应用程序中,它扮演着不可或缺的角色。Struts是一个流行的MVC(Model-View-Controller)框架,帮助开发者构建健壮且可维护的Java Web应用...
Hibernate Validator 是一个强大的Java Bean验证框架,它实现了JSR 303(JavaBeans Validation 1.0)和JSR 349(JavaBeans Validation 1.1)规范,为开发者提供了丰富的数据验证功能。这些规范旨在标准化Java应用...
Hibernate Validator是一个基于Java Bean Validation规范(JSR 349)的实现,它允许开发者通过注解的方式对Java Bean进行校验。Hibernate Validator 5.0.3版本是该实现的特定版本,本手册将详细介绍如何使用这一版本...
《Hibernate Validator 深度解析》 Hibernate Validator 是一个基于 Bean Validation 规范的实现,是 Hibernate 项目的一部分,主要用于进行 Java 对象的验证。它提供了丰富的约束注解和自定义验证逻辑,使得开发者...
BOOTSTRAP VALIDATOR是一款强大的前端验证插件,它与Bootstrap框架完美融合,为开发者提供了便捷的表单验证功能。这款插件基于jQuery库构建,能够帮助开发者轻松实现对用户输入数据的有效性和完整性的检查,从而提升...
### 使用Struts Validator框架 #### 一、简介与配置 在Struts项目中集成Validator功能是提高表单验证效率及准确性的重要步骤。Struts通过一个内置的插件(Plugin)来支持Validator框架,该插件名为`org.apache....
`myValidator`是一个用于表单验证的工具,它在网页应用程序中扮演着至关重要的角色,确保用户输入的数据符合预设的规则和格式。表单验证是前端开发中的基础功能,可以减少服务器端的压力,提高用户体验,防止无效或...
Spring Validator验证是Spring MVC框架中的一个关键特性,用于在服务器端对用户输入数据进行校验。在Spring MVC 3.0版本中,引入了注解驱动的验证方式,极大地简化了验证逻辑,使得开发者能够更加方便地处理表单数据...
《Hibernate Validator 深入解析与应用》 Hibernate Validator 是一个强大的Java Bean验证框架,它基于JSR 303(Bean Validation)和JSR 349(Bean Validation 1.1)标准,提供了丰富的验证注解和自定义验证规则。...
BootstrapValidator是一款基于Bootstrap框架的前端验证插件,用于在用户提交表单前验证输入的数据,确保数据的完整性和正确性。这款插件以其简洁的API和丰富的验证规则,深受前端开发者的喜爱。在Bootstrap的优雅...
`validator`是一个在Java开发中常用的验证框架,用于对输入数据进行校验,确保数据的完整性和准确性。在本文中,我们将深入探讨`validator`验证原代码的核心概念、工作原理以及如何在实际项目中应用。 `Validator`...
Struts的Validator框架是Java Web开发中用于处理用户输入验证的一种强大的工具,它与MVC架构中的控制器层紧密结合,提供了一种便捷的方式来确保用户提交的数据符合预设的业务规则。这个框架大大简化了数据验证的过程...