码迷,mamicode.com
首页 > 其他好文 > 详细

OAF_OAF Validation数据校验验证机制(概念)

时间:2014-06-13 16:33:40      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   code   http   tar   

2014-06-12 BaoXinjian

bubuko.com,布布扣一、摘要(本文大部分内容来源于Tony Liu)


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!”);

 }

}

}

 

bubuko.com,布布扣二、字段级校验案例


案例. 在EO的字段添加异常,如果Total为0值,则抛出异常

1. 字段级验证异常调用

 bubuko.com,布布扣

2. 字段级验证异常测试

 bubuko.com,布布扣

 

bubuko.com,布布扣三、记录级校验案例


案例. 在EO的记录级validateEntity()添加异常,将多个字段组合进行判断,则抛出异常

1. 记录级验证异常调用

 bubuko.com,布布扣

2. 记录级验证异常调用测试

bubuko.com,布布扣

 

bubuko.com,布布扣四、异常触发后如何对transaction进行rollback


不要试图在EOValidation 里执行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();}

 

参考:Tony Liu - http://blog.itpub.net/10359218/viewspace-677447/

 

Thanks and Regards

bubuko.com,布布扣

OAF_OAF Validation数据校验验证机制(概念),布布扣,bubuko.com

OAF_OAF Validation数据校验验证机制(概念)

标签:des   style   blog   code   http   tar   

原文地址:http://www.cnblogs.com/eastsea/p/3784741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!