OAF_VO系列4 - Row Imp的分析(概念)
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
ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
标签:
OAF
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?