OAF_EO系列2 - Validation数据校验验证机制(概念)
2014-06-12 Created By BaoXinjian
1. 在Update数据之前,我们往往要对待更新的记录进行有效性的校验,校验级别包括
- Attribute Level Validation: 字段级的校验
- Entity Level Validation: 记录级的校验
2. 字段级校验-只涉及单个字段的校验
字段级别的校验一般情况下写在EO的set<Attribute name>()方法中,
根据传入的value来决定是执行setAttributeInternal() 还是throw Exception.(代码应写在setAttributeInternal()之前)
例如如果一个订单的状态为CLOSE, 则不允许更改OrderPrice. 伪码如下:
Public void validateEntity()
{
super.validateEntity();
String status = getOrderStatus();
If (“CLOSE”.equals(status))
{
Number ldorderprice = (Number)getPostedAttribute(ORDERPRICE);
Number neworderprice = (Number)getOrderPrice();
If (oldorderprice.compareto(neworderprice)!=0)
{
throw new Exception(“Error: Order Price can not be edited!”);
}
}
}
3. 记录级校验-只涉及多个字段组合的校验
当校验涉及多个Attribute时,你就不能使用字段级的校验了,需使用记录级的校验,即Entity Level Validation. 此校验在validateEntity()方法中实现.
校验代码须写在 super.validateEntity() 之后
例如如果一个订单的状态为CLOSE, 则不允许更改OrderPrice. 伪码如下:
Public void validateEntity()
{
super.validateEntity();
String status = getOrderStatus();
If (“CLOSE”.equals(status))
{
Number ldorderprice = (Number)getPostedAttribute(ORDERPRICE);
Number neworderprice = (Number)getOrderPrice();
If (oldorderprice.compareto(neworderprice)!=0)
{
throw new Exception(“Error: Order Price can not be edited!”);
}
}
}
二、字段级校验案例
案例. 在EO的字段添加异常,如果Total为0值,则抛出异常
1. 字段级验证异常调用
2. 字段级验证异常测试
三、记录级校验案例
案例. 在EO的记录级validateEntity()添加异常,将多个字段组合进行判断,则抛出异常
1. 记录级验证异常调用
2. 记录级验证异常调用测试
四、异常触发后如何对transaction进行rollback
不要试图在EO的Validation 里执行rollback() 方法或clearcache() 方法. 当出现校验失败时,有下面两种做法:
Bad Method:
- 在EO Module
public void validateEntity(){
….
transaction.rollback()
throw new OAException….
}
Right Method:
- In EO Module
public void validateEntity(){
throw new OAException…
}
- In AM Module
Try
{ transaction.commit();
}Catch ( OAException ex)
{transaction.rollback();}
Thanks and Regards
参考:Tony Liu - http://blog.itpub.net/10359218/viewspace-677447/
OAF_EO系列2 - Validation数据校验验证机制(概念)的更多相关文章
- Silverlight实例教程 - Validation数据验证DataAnnotation机制和调试技巧(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- Silverlight实例教程 - Validation数据验证基础属性和事件(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- Silverlight实例教程 - Validation数据验证开篇
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- JVM系列文章(四):类载入机制
作为一个程序猿,只知道怎么用是远远不够的. 起码,你须要知道为什么能够这么用.即我们所谓底层的东西. 那究竟什么是底层呢?我认为这不能一概而论.以我如今的知识水平而言:对于Web开发人员,TCP/IP ...
- .NET 并行(多核)编程系列之七 共享数据问题和解决概述
原文:.NET 并行(多核)编程系列之七 共享数据问题和解决概述 .NET 并行(多核)编程系列之七 共享数据问题和解决概述 前言:之前的文章介绍了了并行编程的一些基础的知识,从本篇开始,将会讲述并行 ...
- tensorflow 1.0 学习:十图详解tensorflow数据读取机制
本文转自:https://zhuanlan.zhihu.com/p/27238630 在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找 ...
- python之路day06--python2/3小区别,小数据池的概念,编码的进阶str转为bytes类型,编码和解码
python2#print() print'abc'#range() xrange()生成器#raw_input() python3# print('abc')# range()# input() = ...
- 9.10 翻译系列:EF数据注解特性之StringLength【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/stringlength-dataannotations-attribute-in-co ...
- 十图详解tensorflow数据读取机制
在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...
随机推荐
- Sublime Text 转
距第一篇的开箱水文,已经有4个月的时间了,但因为懒,就没有下文了.终于,今天,我觉得写一篇准技术文章了. 忘记了是怎么开始用的ST,应该是在网上看到别人推荐才用到吧,用了有半年了.在windows下是 ...
- 用 jQuery 实现表单验证(摘抄)
——选自<锋利的jQuery>(第2版)第5章的例题 5.1.5 表单验证 表单作为 HTML 最重要的一个组成部分,几乎在每个网页上都有体现,例如用户提交信息.用户反馈信息和用户查询信 ...
- stl迭代器原理
具体实现肯定不如书上讲的清楚了,这里只是根据侯捷书上的讲解,自己建立一条思路以及形成一些相关的概念 迭代器也可被称作智能指针,用于遍历容器内的元素,stl每个容器都实现了自己的iterator,ite ...
- Processor Speculative & pipeline
https://en.wikipedia.org/wiki/Instruction-level_parallelism https://en.wikipedia.org/wiki/Instructio ...
- JSBinding + SharpKit / 安装SharpKit以及添加SharpKit工程
本文说明如何往 sln 中添加 SharpKit 工程,以及配置. SharpKit 工程用于将 C# 源代码编译成 JS 代码. QQ群 189738580 1. 安装SharpKit 到 sha ...
- sed详解
1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...
- memcache中的add和set方法区别
相信大家对memcache都不陌生,在项目中也经常使用memcache作为缓存方案,那么在使用过程中有没有发现为什么memcahce有两个添加缓存的方法:一个是add,一个是set,那么你知道这2个方 ...
- struts2获得request和session对象
在struts1中,获得到系统的request或者session对象非常方便,都是按照形参传递的,但是在struts2中,request和session都被隐藏了 struts2提供两种方式访问ses ...
- python datetime
不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解python操作日期和时间的方法.1.将字符串的时间转换为时间戳 ...
- rsyslog
http://www.rsyslog.com/ http://www.rsyslog.com/doc/v5-stable/troubleshooting/troubleshoot.html RSYSL ...