Hello all
this post is about a requirement of getting page binding of another page that is not active currently
we use BindingContainer to access bindings of current page, region in managed bean
Oracle Docs says-
The BindingContainer contains the Control Bindings for a reusable unit of View technology. For example, each individual Page, Region, or Panel refers to a unique BindingContainer with a set of Control Bindings that refer to the Model elements used by that Page. The BindingContainer interface is implemented by the data binding framework provider.
So to access operations, methods exposed in client, listBinding, IteratorBinding we need to get BindingContainer of current viewPort (a page or a page fragment)
this method is used to get BindingContainer -
as previously mentioned that BindingContainer contains bindings of current page but sometimes we need to access BindingContainer of any other page in order to access it's operations , iterators
So how to do this ?
for this i have created a 2 page fragments inside a bounded taskFlow
firstPage is very simple , it has only one button and secodPage has Departments (HR Schema ) viewObject as form
then i added createInsert operation in secodPage binidng, so here is the pageDef of secondPage
as there is no bindings on firstPage so there is no pageDef file is generated for that
now what i want to do is to call createInsert operation of Departments viewObject from firstPage, but there is no binding of operation in firstPage so if i use
Now i have to get BindingContainer of secondPage -
Go to DataBindings.cpx file and see usageId for second page
Copy page usageId from there
pass this usageId in this method to get BindingContainer of secondPage
then call createInsert operation using this BindingContainer
Happy Learning Cheers :)
this post is about a requirement of getting page binding of another page that is not active currently
we use BindingContainer to access bindings of current page, region in managed bean
Oracle Docs says-
The BindingContainer contains the Control Bindings for a reusable unit of View technology. For example, each individual Page, Region, or Panel refers to a unique BindingContainer with a set of Control Bindings that refer to the Model elements used by that Page. The BindingContainer interface is implemented by the data binding framework provider.
So to access operations, methods exposed in client, listBinding, IteratorBinding we need to get BindingContainer of current viewPort (a page or a page fragment)
this method is used to get BindingContainer -
import oracle.adf.model.BindingContext; import oracle.binding.BindingContainer; /*****Generic Method to get BindingContainer of current page, fragment or region**/ public BindingContainer getBindingsCont() { return BindingContext.getCurrent().getCurrentBindingsEntry(); }
as previously mentioned that BindingContainer contains bindings of current page but sometimes we need to access BindingContainer of any other page in order to access it's operations , iterators
So how to do this ?
for this i have created a 2 page fragments inside a bounded taskFlow
firstPage is very simple , it has only one button and secodPage has Departments (HR Schema ) viewObject as form
First Page | Second Page |
then i added createInsert operation in secodPage binidng, so here is the pageDef of secondPage
as there is no bindings on firstPage so there is no pageDef file is generated for that
now what i want to do is to call createInsert operation of Departments viewObject from firstPage, but there is no binding of operation in firstPage so if i use
BindingContext.getCurrent().getCurrentBindingsEntry()to get BindingContainer then it will throw NullPointerException on calling createInsert
Now i have to get BindingContainer of secondPage -
Go to DataBindings.cpx file and see usageId for second page
Copy page usageId from there
pass this usageId in this method to get BindingContainer of secondPage
/** * @param data * @return */ public Object resolvEl(String data) { FacesContext fc = FacesContext.getCurrentInstance(); Application app = fc.getApplication(); ExpressionFactory elFactory = app.getExpressionFactory(); ELContext elContext = fc.getELContext(); ValueExpression valueExp = elFactory.createValueExpression(elContext, data, Object.class); Object Message = valueExp.getValue(elContext); return Message; } /**Method to get BindingContainer of Another page ,pageUsageId is the usageId of page defined in DataBindings.cpx file * @param pageUsageId * @return */ public BindingContainer getBindingsContOfOtherPage(String pageUsageId) { return (BindingContainer) resolvEl("#{data." + pageUsageId + "}"); }
then call createInsert operation using this BindingContainer
getBindingsContOfOtherPage("binidngs_view_secondPagePageDef").getOperationBinding("CreateInsert").execute();
Happy Learning Cheers :)
Where is he writing this java code.. in which bean?
ReplyDeleteIn backing bean for Task Flow that differs than "binidngs_view_secondPagePageDef"
DeleteThanks for acticle!
ReplyDeleteThis work for me
getBindingsContOfOtherPage("view_choosePeriodViewPageDef").getOperationBinding("DeletePayroll").execute();
But when I'm trying to get attribute binding I'm getting -1. Could you tell me why?
getBindingsContOfOtherPage("view_choosePeriodViewPageDef").getControlBinding("PeriodName").toString();
Hi Vladimir
DeleteOnce check this Access Attribute value from binding
Ashish