Refresh Problems using Adaptive Bindings
By Duncan Mills on Jan 18, 2013
In a previous article (Towards Ultra-Reusability for ADF - Adaptive Bindings) I discussed how ADF Data Binding can be a lot more flexible that you would think due to the neat trick of being able to use expression language within the PageDef file to create bind sources that can be switched at runtime.
As it happens my good buddy Frank Nimphius picked up the technique to use on a particular project and hit a slight problem. If you change the results of the EL used in the binding - for example, you switch the base VO from Departments to Employees, things don't get refreshed correctly. In fact what you see is that any attribute names that happen to match between the old and the new source will be correctly populated with the new data but the actual list of attributes will not be refreshed. The effect is that if you were using one of these bindings to populate a table, the "shape" of the table, in terms of its columns, would not change.
No worries though, given that Frank is a clever chap he worked out the correct way to address this which is to simply call clearForRecreate() on the iterator binding.
BindingContext bctx = BindingContext.getCurrent(); BindingContainer bindings = bctx.getCurrentBindingsEntry(); DCIteratorBinding iter = (DCIteratorBinding) bindings.get("TableSourceIterator"); iter.clearForRecreate();