我开发一个ADF应用程序。 我有个问题。 我的jdev版本11.1.2.3.0。
因此,例如,我有这样的“http://www.hohoho.com/view/index.xhtml?_adf.ctrl-state=ju9lnu5ld_3”的网址
在该页面中我有一个表从数据库获取价值。 例如同样,我在DB浏览器改变了一些行,并单击Web浏览器的刷新按钮。 但是,新成果犯规得到! 例如我删除“?_adf.ctrl状态= ju9lnu5ld_3”并输入URL,这得到新的结果。 如何处理这种情况。 我需要的是,当用户单击刷新按钮,最后的结果必然是牵强。 我认为这是基于ADF状态。 如何处理这种情况。
解
由于Andread,MySQL的自动提交属性默认值是真的,不是假的:)但我使用它错误的。 我已经解决了像你这样的问题,但我自己的解决方案很爽:)我只overried的clearCache()方法。 它解决了这个问题。
public void clearCache() {
getDBTransaction().commit(); // added
super.clearCache();
}
从查询结果会被缓存在中间层。 这就是为什么通过应用程序不是更新它们通过不同的渠道应用的数据库中没有反映的页面重新加载时的原因。
我使用JDeveloper 11.1.1.7。 在迭代器设置“CacheResults”属性false
解决了这个问题(去你的页面或页面片段中包含的表中的“绑定”选项卡,选中迭代器可执行文件为您的表中的数据,并在属性检查器的“高级”部分,设置‘CacheResults’到‘假’)。
在XML方面,在迭代器定义PageDef.xml
文件应该是这样
<iterator id="TestIterator" Binds="TestView1"
DataControl="AppModuleDataControl" RangeSize="25"
CacheResults="false"/>
有似乎是解决这个问题,很可能这是在早期版本的JDeveloper需要一些额外的方法:
- http://technology.amis.nl/2012/06/18/notifying-adf-applications-of-database-changes-fast-and-lean-using-database-query-result-change-notification-part-one/
- http://radio-weblogs.com/0118231/stories/2005/06/16/whyIsntRefreshingTheBrowserPageEnoughToRefreshTheDataDisplayed.html
附录03-DEC-2012
OP使用MySQL。 与MySQL,设置CacheResults
属性是必需的,但还不够。 缺省地,MySQL与运行autocommit=false
其具有副作用使用隔离级别的REPEATABLE READ
。 一个SELECT
隐含打开一个交易,以及随后SELECTs
返回相同的结果。 在Oracle RDBMS使用READ COMMITTED
默认情况下,这样的数据插入,并致力于在一个会话由SELECT不同回来了。
一种解决方案来解决这个问题的ADF是创建视图对象的实现类,覆盖executeQueryForCollection()
执行查询之前并提交事务:
protected void executeQueryForCollection(Object object, Object[] object2, int i) {
getApplicationModule().getTransaction().commit();
super.executeQueryForCollection(object, object2, i);
}
请小心使用此并查看您的实际隔离级别要求,以确保您不会意外被刷新浏览器提交的数据。 该解决方案的另一个缺点是,它是不是Oracle RDBMS和MySQL之间进行移植。
见https://github.com/afester/StackOverflow/tree/master/AdfRefresh为SSCCE。