af:inputListOfValues provides option to open Lov values in a popup and allow user to search, We can open this popup by clicking on magnifying glass icon
Recently I have seen a thread on OTN forum where user wants to open lov popup on a button click after checking some conditions and also found a post by Frank Nimphius Where he used javascript to open Lov popup on double click of mouse.
So guess what I have done ? ;)
Just called that javascript fucntion programmatically on button click
- Created Lov on Department Name attribute of Departments viewObect and dropped on page
- Dropped a button on page to open Lov popup
- See button code in Managed Bean, Here I am calling a javascript code this code finds lov component using it's ID and then queue LaunchPopupEvent.
- Run and check application, click on button
importjavax.faces.context.FacesContext;
importjavax.faces.event.ActionEvent;
importorg.apache.myfaces.trinidad.render.ExtendedRenderKitService;
importorg.apache.myfaces.trinidad.util.Service;
/**Helper Method to call Javascript
* @param javascriptCode
*/
publicstaticvoidwriteJavaScriptToClient(String javascriptCode){
FacesContext facesCtx = FacesContext.getCurrentInstance();
ExtendedRenderKitService service = Service.getRenderKitService(facesCtx, ExtendedRenderKitService.class);
service.addScript(facesCtx, javascriptCode);
}
/**Method to open Lov popup programmatically
* @param actionEvent
*/
publicvoidopenLovPopupUsingJS(ActionEvent actionEvent){
StringBuilder sb =new StringBuilder();
//Here deartmentNameId is ID attribute of InputLov
sb.append("var lovComp =AdfPage.PAGE.findComponent('departmentNameId');");
sb.append("\n if (lovComp instanceof AdfRichInputListOfValues && lovComp.getReadOnly() == false) {\n"+
" AdfLaunchPopupEvent.queue(lovComp, true);}");
writeJavaScriptToClient(sb.toString());
}