我正在使用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()
未发送更改通知。
尽管如此,我担心这不是甲骨文的文件所说的,所以我不知道这是正确的,还是一个糟糕的想法。所以,我原来的问题仍然存在。
答案 0 :(得分:0)
我用Oracle登录了SR。他们的回答是,如果您覆盖doDML()
并且不调用super.doDML()
,那么您将失去框架的自动刷新功能。
他们不会评论我的解决方案,即在doSelect(false)
覆盖中的任何插入或更新后调用doDML()
。他们的政策是,如果您需要有关自定义的建议,您应该参与Oracle咨询。
答案 1 :(得分:0)
在ADF World 中,我遇到了这种情况,并通过简单的方法解决了该问题, 首先,这里似乎有错误,但我可以解释应该执行的预期步骤。 在MVC方法中,在背景[模型层]中设置的值不应由用户编辑。
1个单词的解决方案添加af | inputText disabled =“ true”的属性。