博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OAF_VO系列4 - Row Imp的分析(概念)
阅读量:6293 次
发布时间:2019-06-22

本文共 1829 字,大约阅读时间需要 6 分钟。

20150706 Created By BaoXinjian

一、摘要


如果使用过OAF(客户化或标准EBS页面)的人可能会发现这样两个问题:

   1、当在表单上输入内容,点确定按钮出错后,页面显示错误信息,此时不做任何修改,再点确定按钮就不会再执行底层实体对象的验证。

   2、当你输入了内容,提交触发实体对象验证失败后,你所输入的数据可能无法保留,而显示原先的内容或者是默认的值。

第一个问题的原因是在于触发过实体对象验证,用户不修改任何值,不会引起实体对象的再次验证;

第二个问题的原因是在控制器的processFormData方法中,将页面中的值写入视图对象时,触发了实体对象的验证,造成无法把页面中的值写入视图对象属性,而保留原先的值或默认值。

 

二、方案


Step1. 在控制器中覆盖OAControllerImpl的processFormData方法,设置ROW的状态为STATUS_INITIALIZED

if ("Y".equals(pageContext.getTransactionValue("ErrorExist"))) //如果EO验证失败,设置该Transaction值{  RowSetIterator it = vo.createRowSetIterator("initIt");    int rowCount = vo.getFetchedRowCount();  it.setRangeStart(0);  it.setRangeSize(rowCount);    try  {     for (int i=0;i          {        Row row = it.getRowAtRangeIndex(i);        row.setNewRowState(Row.STATUS_INITIALIZED); // 将不执行实体对象的验证     }  }  finally  {    it.closeRowSetIterator();  } }  super.processFormData(pageContext, webBean);

 

Step2. 然后在processFormRequest中强制执行Row的验证

if ((pageContext.getParameter("Submit") != null) && ("Y".equals(pageContext.getTransactionValue("ErrorExist")))){   RowSetIterator it = vo.createRowSetIterator("checkIt");     ArrayList exptList = new ArrayList();     int rowCount = vo.getFetchedRowCount();   it.setRangeStart(0);   it.setRangeSize(rowCount);     try   {      for (int i=0;i   {      try      {        Row row = it.getRowAtRangeIndex(i);        if (...) // 判断记录是否是新建的记录      {         row.setNewRowState(Row.STATUS_NEW); // 对于新建的记录,必须设置STATUS_NEW状态,才会触发实体验证      }      row.validate();      }      catch(Exception e)      {         exptList.add(e);      }     }    }    finally  {     it.closeRowSetIterator();  }    if (exptList.size() > 0)  {   OAException.raiseBundledOAExcetion(exptList);  }     pageContext.removeTransactionValue("ErrorExist");}

 

Thanks and Regards

转载于:https://www.cnblogs.com/eastsea/p/4616961.html

你可能感兴趣的文章
mongodb $exists
查看>>
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>
控件的拖动
查看>>
svn eclipse unable to load default svn client的解决办法
查看>>
Android.mk 文件语法详解
查看>>
QT liunx 工具下载
查看>>
内核源码树
查看>>
AppScan使用
查看>>
Java NIO框架Netty教程(三) 字符串消息收发(转)
查看>>
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>
JavaScript 基础(九): 条件 语句
查看>>
Linux系统固定IP配置
查看>>