How-to dynamically filter model-driven LOV
Posted
by Frank Nimphius
on Oracle Blogs
See other posts from Oracle Blogs
or by Frank Nimphius
Published on Sun, 24 Jun 2012 19:23:20 +0000
Indexed on
2012/06/24
21:20 UTC
Read the original article
Hit count: 528
/Oracle/ADFm
Often developers need to filter a LOV query with information obtained from an ADF Faces form or other where. The sample below shows how to define a launch popup listener configured on the launchPopupListener property of the af:inputListOfValues component to filter a list of values.
<af:inputListOfValues id="departmentIdId"
value="#{bindings.DepartmentId.inputValue}"
model="#{bindings.DepartmentId.listOfValuesModel}"
launchPopupListener="#{PopupLauncher.onPopupLaunch}" … >
…
</af:inputListOfValues>
A list of values is queried using a search binding that gets created in the PageDef file of a view when a lis of value component gets added. The managed bean code below looks this search binding up to then add a view criteria that filters the query.
Note: There is no public API yet available for the FacesCtrlLOVBinding class, which is why I use the internal package class it in the example.
public void onPopupLaunch(LaunchPopupEvent launchPopupEvent) {
BindingContext bctx = BindingContext.getCurrent();
BindingContainer bindings = bctx.getCurrentBindingsEntry();
FacesCtrlLOVBinding lov =
(FacesCtrlLOVBinding)bindings.get("DepartmentId");
ViewCriteriaManager vcm =
lov.getListIterBinding().getViewObject().getViewCriteriaManager();
//make sure the view criteria is cleared
vcm.removeViewCriteria(vcm.DFLT_VIEW_CRITERIA_NAME);
//create a new view criteria
ViewCriteria vc =
new ViewCriteria(lov.getListIterBinding().getViewObject());
//use the default view criteria name
//"__DefaultViewCriteria__"
vc.setName(vcm.DFLT_VIEW_CRITERIA_NAME);
//create a view criteria row for all queryable attributes
ViewCriteriaRow vcr = new ViewCriteriaRow(vc);
//for this sample I set the query filter to DepartmentId 60.
//You may determine it at runtime by reading it from a managed bean
//or binding layer
vcr.setAttribute("DepartmentId", 60);
//also note that the view criteria row consists of all attributes
//that belong to the LOV list view object, which means that you can
//filter on multiple attributes
vc.addRow(vcr);
lov.getListIterBinding().getViewObject().applyViewCriteria(vc);
}
Note: Instead of using the vcm.DFLT_VIEW_CRITERIA_NAME name you can also define a custom name for the view criteria.
© Oracle Blogs or respective owner