在这篇简短的文章中,我将重点介绍与在任务流中创建新记录的一种非常常见的方法有关的一个小陷阱。
让我们考虑一个简单的任务流示例,该任务流创建一个新的VO行,如果用户单击“确定”按钮,则在页面片段上显示该行并提交事务:
刚刚从数据控件面板中拖放了CreateInsert方法调用。 事实是,如果用户不更新任何VO属性,
view1页面片段, Commit方法调用将无济于事。 新行将不会发布到数据库。
出现这种现象的原因是,ADF绑定CreateInsert操作始终创建处于Initialized状态的实体,框架在提交事务时会忽略它们。 即使实体具有默认值,或者它的Create方法被覆盖了设置属性值,也没关系,在创建实体之后,实体仍将处于Initialized状态
CreateInsert操作。
之后,如果修改了任何VO属性,则该实体将获得“ 新”状态,并且该框架将在提交事务时发布更改(执行瓶坯插入语句)。 这种行为非常合乎逻辑,因为在大多数情况下,此类任务流会创建一个视图对象行,以使其在提交给数据库之前由用户进行更新。 但是,大多数情况并非全部,如果需要,我们总是可以实现自定义VO方法来创建/插入新行并调用它,而不是标准的CreateInsert操作。 像这个:
public void addNewEmployee() {
EmployeeViewRowImpl row = (EmployeeViewRowImpl) createRow();
insertRow(row);
}
而已!
翻译自: https://www.javacodegeeks.com/2017/12/creating-view-object-row-adf-bindings-createinsert-action.html