9. 9
Fundamental Theorem of Software Engineering (FTSE)
We
can
solve
any
problem
by
introducing
an
extra
level
of
indirec8on.
…except
for
the
problem
of
too
many
levels
of
indirec8on
13. Why ADF Bindings?
12
• A
core
part
of
Oracle
ADF
• Powered
by
Oracle
• Declara8ve
programming
approach
• Common
UI
tasks
out-‐of-‐
the-‐box
–
Naviga8on
–
Range
fetching
–
State
Management
• ADF
Bindings
API
31. Accessing Binding Container
31
public
BindingContainer
getBindingContainer()
{
BindingContext
bindingContext
=
BindingContext.getCurrent();
return
bindingContext.getCurrentBindingsEntry();
}
² Get Binding Context instance
² Get Current Binding Container
32. Executing Method Action
32
² Get Operation Binding from Binding Container
² Set up parameters
² Execute
² Check for errors
public
void
raisePay(Integer
employeeId)
{
BindingContainer
bindings
=
getBindings();
Opera8onBinding
op
=
bindings.getOpera8onBinding("raisePay");
op.getParamsMap().put("employeeId",
employeeId);
Object
result
=
op.execute();
if
(!op.getErrors().isEmpty())
{
//Do
something
with
this
list
of
JboExcep8ons
List
errorList
=
op.getErrors();
}
}
<methodAc8on
Ac8on="invokeMethod”
MethodName="raisePay”
id="raisePay”
...
33. Accessing Attribute Binding
33
public
String
getEmailValue()
{
BindingContainer
bindings
=
getBindings();
AcributeBinding
emailBinding
=
(AcributeBinding)
bindings.getControlBinding("Email");
return
(String)
emailBinding.getInputValue();
}
² Get Binding Container
² Find Attribute Binding by Id
² Return Input Value
<bindings>
<acributeValues
IterBinding="VEmployeesIterator"
id="Email">
<AcrNames>
<Item
Value="Email"/>
</AcrNames>
</acributeValues>
…
34. Accessing LOV Binding
34
² Get Binding Container
² Find JUCtrlListBinding by Id
² Get Selected Row
² Return Attribute Value
public
String
getDepartmentName()
{
BindingContainer
bindings
=
getBindings();
JUCtrlListBinding
lov
=
(JUCtrlListBinding)
bindings.getControlBinding("DepartmentId");
//
Get
the
selected
row
Row
selectedRow
=
(Row)
lov.getSelectedValue();
return
(String)
selectedRow.getAcribute("DepartmentName");
}
<bindings>
<list
IterBinding="VEmployeesIterator"
Sta8cList="false"
DTSupportsMRU="true"
SelectItemValueMode="ListObject"
Uses="LOV_DepartmentId"
id="DepartmentId”/>
…
35. Accessing Iterator Binding
35
² Get Binding Container as DCBindingContainer
² Find DCIteratorBinding by Id
² Execute VO query
² Get Current Row (ViewRowImpl)
² Get View Object Instance
public
void
workWithIterator()
{
DCBindingContainer
bindings
=
(DCBindingContainer)
getBindings();
DCIteratorBinding
iter
=
bindings.findIteratorBinding("VEmployeesIterator");
//Execute
RowSet
query
iter.executeQuery();
//Get
current
row
Row
r
=
iter.getCurrentRow();
//Get
View
Object
ViewObject
vo
=
iter.getViewObject();
}
<iterator
Binds="VEmployees"
RangeSize="25"
DataControl="EmployeesAMDataControl"
id="VEmployeesIterator"/>
52. Dynamic Bindings. Why?
52
² DynamicForm is straight forward
² DynamicForm is not good for Facelets
² Jdeveloper 12c is still new
² DynamicComponent has limitations
² Tree bindings might be expensive
² Useful for declarative components
² It’s fun!
² Have to finish the route
<tree
IterBinding="VDynamicterator"
id="VDynamic">
<nodeDefini8on
Name="VDynamic0"/>
</tree>
53. Creating Value Binding
53
² Get Control Definition Factory
Defini8onFactory
defFactory
=
JUMetaObjectManager.getJUMom().getControlDefFactory();
² Create an instance of Control Value Definition (JUCtrlAcrsDef,
JUCtrlBoolDef,
…)
JUCtrlValueDef
acrDef
=
(JUCtrlValueDef)
defFactory.createControlDef(BINDING_TYPE);
² Initialize Control Value Definition
HashMap
initValues
=
new
HashMap();
initValues.put(PARAM_NAME,
PARAM_VALUE);
acrDef.init(initValues);
² Create an instance of Control Value Binding
JUCtrlValueBinding
acr
=
(JUCtrlValueBinding)
acrDef.createControlBinding(getBindings());
² Add Control Value Binding to Binding Container
getBindings().addControlBinding(acr.getName(),
acr);
54. Dynamic Attribute Value Binding
54
private
JUCtrlAcrsBinding
createAcrValue(String
acrName,
String
iteratorName)
{
Defini8onFactory
defFactory
=
JUMetaObjectManager.getJUMom().getControlDefFactory();
JUCtrlAcrsDef
acrDef
=
(JUCtrlAcrsDef)
defFactory.createControlDef(DCDefBase.PNAME_TextField);
//Ini8alize
acribute
values
binding
defini8on
HashMap
initValues
=
new
HashMap();
initValues.put(DCControlBindingDef.PNAME_IterBinding,
iteratorName);
initValues.put(ListBindingDef.PNAME_AcrNames,
new
String[]
{acrName});
initValues.put(JUTags.ID,
acrName);
acrDef.init(initValues);
//Create
an
instance
of
acribute
values
binding
JUCtrlAcrsBinding
acr
=
(JUCtrlAcrsBinding)
acrDef.createControlBinding(getBindings());
//Add
the
instance
to
the
current
binding
container
getBindings().addControlBinding(acrDef.getName(),
acr);
return
acr;
}