EntityImpl中重写的doDML()不刷新属性

时间:2016-02-24 19:09:03

标签: oracle-adf

我正在使用Oracle ADF页面来更新表中的数据。我的实体对象基于表,但我希望DML(插入,更新,删除)通过数据库中的包过程而不是使用ADF框架生成的默认DML。

为实现这一目标,我正在关注Oracle的文档,可在此处找到:http://docs.oracle.com/cd/E23943_01/web.1111/b31974/bcadveo.htm#ADFFD1129

一切正常。问题是,默认的ADF DML处理会在写入实体行后自动刷新实体行,使用RETURNING INTO子句或单独发布的SELECT语句(取决于isUseReturningClause()的值在EntityDefImpl对象中。这样做是为了在DML过程中数据库修改行的情况下更新应用程序前端(例如,BEFORE ROW触发器更改值)。

但是,当我覆盖doDml()以通过调用我的包过程替换默认框架DML时,即使isUseReturningClause()返回false,它也不再自动刷新。

我尝试在我的doDml()实现中添加代码以便在之后重新查询,但它不起作用(可能我没有正确执行)。但是,Oracle的文档没有说明必须这样做。

有谁知道如何做到这一点?

更新

我之后通过调用doDml()恢复了我doSelect()刷新的尝试并且它有效。我的原始尝试无效,因为doSelect()未发送更改通知。

尽管如此,我担心这不是甲骨文的文件所说的,所以我不知道这是正确的,还是一个糟糕的想法。所以,我原来的问题仍然存在。

2 个答案:

答案 0 :(得分:0)

我用Oracle登录了SR。他们的回答是,如果您覆盖doDML()并且不调用super.doDML(),那么您将失去框架的自动刷新功能。

他们不会评论我的解决方案,即在doSelect(false)覆盖中的任何插入或更新后调用doDML()。他们的政策是,如果您需要有关自定义的建议,您应该参与Oracle咨询。

答案 1 :(得分:0)

在ADF World 中,我遇到了这种情况,并通过简单的方法解决了该问题, 首先,这里似乎有错误,但我可以解释应该执行的预期步骤。 在MVC方法中,在背景[模型层]中设置的值不应由用户编辑。

1个单词的解决方案添加af | inputText disabled =“ true”的属性。