在ADF中的VOImpl中对beforeCommit()进行更改

时间:2013-08-03 10:32:14

标签: oracle-adf

我需要在错误数据完全发布到数据库之前纠正错误数据...

我发现可以在View Object Impl Class中完成验证。我尝试使用以下代码在代码中进行更改:

public void beforeCommit(TransactionEvent e) {

Row row = this.getCurrentRow();

Row[] locationRows = this.getAllRowsInRange();

System.out.println(this.getCurrentRowIndex());

for (int i = 0; i < locationRows.length; i++) {
    System.out.println(locationRows[i].getAttribute("PortSequenceNo"));
    locationRows[i].setAttribute("PortSequenceNo", 100 + i);
    this.validate();
    System.out.println("validated");
    this.postChanges(e);
    System.out.println("Changes posted");

}

validatePSN(locationRows);

super.beforeCommit(e);
}

但是这段代码给出了以下错误:

  

javax.faces.el.E​​valuationException:oracle.jbo.JboException:   JBO-28202:在beforeCommit()中无效的实体。需要重新验证   并发布。在   org.apache.myfaces.trinidadinternal.taglib.util.MethodExpressionMethodBinding.invoke(MethodExpressionMethodBinding.java:58)     在   org.apache.myfaces.trinidad.component.UIXComponentBase.broadcastToMethodBinding(UIXComponentBase.java:1433)

请帮助我应该做什么,以便我可以对通过ADF表格发布的实际值进行最后一分钟更改

2 个答案:

答案 0 :(得分:0)

使用EntityImpl类的doDML方法。

的Javadoc: EntityImpl doDML method

  

重写此方法以提供处理插入的自定义逻辑,   更新和删除。

答案 1 :(得分:0)

您可以覆盖方法public void postChanges(TransactionEvent transactionEvent) 但是,如果您在调用super之前进行了更改,则必须对每行执行row.validate(),您已经修改过。