OAF中 遍历HGrid组件中的所有VO行

 在HGrid组件中有如下所示的HeaderVO和LineVO

需要在头上的LOV中触发事件去更新行VO中的值,LOV事件的处理方法见 getLovParameter ,但是由于HGrid的特殊性,不能取到当前事件行,所以建议在VO中新增一个transection的变量,例如LovChangeFlag。

 

选择LOV的事件后设置该值为Y

public void setAccountItemId(Number value)
{
setAttributeInternal(ACCOUNTITEMID, value);
setLovChangeFlag("Y");
}

PFR 中LOV事件处理

else if (pageContext.isLovEvent()) {

else if ("AccountItemCode".equalsIgnoreCase(lovInputSourceId)) {
OAHGridBean hGridBean = 
(OAHGridBean)webBean.findChildRecursive("AccountHgrid");
OAHGridQueriedRowEnumerator hgridEnum = 
new OAHGridQueriedRowEnumerator(pageContext, hGridBean);

am.drAccountChangeFin(hgridEnum);
}

}

am中事件处理

  public void drAccountChangeFin(OAHGridQueriedRowEnumerator hgridEnum)
  {
      
    while (hgridEnum.hasMoreElements())
    {
      Row rowToUpdate = (Row)hgridEnum.nextElement();
      if (rowToUpdate != null)
      {
        String lovChangeFlag = 
          (String)rowToUpdate.getAttribute("LovChangeFlag");
        if ("Y".equals(lovChangeFlag)) //得到触发LOV事件的行
        {
          rowToUpdate.setAttribute("LovChangeFlag", "N");  //得到后再将此值设为N
                    Number headerId= 
            (Number)rowToUpdate.getAttribute("HeaderId");
          //业务代码
          //...
            while (hgridEnum.hasMoreElements())
                {
                  rowToUpdate = (Row)hgridEnum.nextElement();
                  Number currentHeaderId = 
                    (Number)rowToUpdate.getAttribute("HeaderId");
                    //此处判断遍历得到的row是否是LINEVO中的数据
                  if (headerId.equals(currentHeaderId))
                  {
                    rowToUpdate.setAttribute("XXX", value );
                  }
                }
        }
      }
    }
  }    

OAHGridQueriedRowEnumerator会将HGrid中所有的数据放入枚举中,并且会将HeaderVO中的所有数据放在前面,将LineVO中的所有数据放在后面,所以不用担心在遍历的时候会先遍历到LineVO中的数据。

转载于:https://www.cnblogs.com/huanghongbo/p/5997799.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值