• OAF_VO系列4


    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

  • 相关阅读:
    查看邵杨的源码
    java 读写excle
    绘图的引擎
    handler的使用
    小结
    周末,啦啦啦
    监控宝发布移动应用监控服务 引领移动APM
    监控宝优化升级 创新驱动用户体验
    云智慧:顺势而为 做世界级APM服务商
    性能为王:云智慧APM助小米IT服务能力提升
  • 原文地址:https://www.cnblogs.com/eastsea/p/4616961.html
Copyright © 2020-2023  润新知