0

我有一个要求,我需要在将错误数据完全发布到数据库之前更正它...

我发现可以在 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 表格发布的实际值进行最后一分钟的更改

4

2 回答 2

0

使用 EntityImpl 类的 doDML 方法。

Javadoc: EntityImpl doDML 方法

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

于 2014-01-17T04:30:19.963 回答
0

您应该覆盖方法protected void prepareForDML(int operation, TransactionEvent transactionEvent)
此时,您可以安全地修改属性值。

于 2017-06-28T14:41:15.457 回答