While working on project , I have seen such type of LOV that have a option of create Lov Value at selection time, this is quite good, as if desired value is not available in list then user can create on that time.
This type of list looks like this
It means if there is no company available in list you need not to go on Company form, user can create it directly from here.
Doing this in ADF is quite simple , in this tutorial i am taking example of Oracle default HR schema (Employees and Departments) table-
Implementation Steps-
- Create business components from Department and Employees table
- Now create LOV on DepartmentId of employees ViewObject from Department VO
- Go to UI Hints tab of LOV and select Combo Box with List of Values
- Now drag fields of Employee from DataControl to page as form
- Select Department Id Lov and go to structure window, and drop a link in customActions facet of af:inputComboboxListOfValues
- Now drag a popup on page and drag Department VO on af:dialog as form to create new department. and other things are same as normal form
- Bind this popup to bean and create a ActionListener on the link inside facet to invoke createInsert of department table
- Now run this application and click on Lov of DepartmentId, you will see your link there to create Department
package lookup.view.bean; import java.io.Serializable; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import oracle.adf.model.BindingContext; import oracle.adf.view.rich.component.rich.RichPopup; import oracle.adf.view.rich.event.DialogEvent; import oracle.binding.BindingContainer; import oracle.binding.OperationBinding; import org.apache.myfaces.trinidad.render.ExtendedRenderKitService; import org.apache.myfaces.trinidad.util.Service; public class LookupDataBean implements Serializable { private RichPopup deptPopUpBind; public LookupDataBean() { } public BindingContainer getBindings() { return BindingContext.getCurrent().getCurrentBindingsEntry(); } private void showPopup(RichPopup pop, boolean visible) { try { FacesContext context = FacesContext.getCurrentInstance(); if (context != null && pop != null) { String popupId = pop.getClientId(context); if (popupId != null) { StringBuilder script = new StringBuilder(); script.append("var popup = AdfPage.PAGE.findComponent('").append(popupId).append("'); "); if (visible) { script.append("if (!popup.isPopupVisible()) { ").append("popup.show();}"); } else { script.append("if (popup.isPopupVisible()) { ").append("popup.hide();}"); } ExtendedRenderKitService erks = Service.getService(context.getRenderKit(), ExtendedRenderKitService.class); erks.addScript(context, script.toString()); } } } catch (Exception e) { throw new RuntimeException(e); } } public void createDept(ActionEvent actionEvent) { BindingContainer bindings = getBindings(); OperationBinding ob = bindings.getOperationBinding("CreateInsert"); ob.execute(); showPopup(deptPopUpBind, true); } public void DeptDialogListener(DialogEvent dialogEvent) { FacesContext fct = FacesContext.getCurrentInstance(); if (dialogEvent.getOutcome().name().equals("ok")) { BindingContainer bindings = getBindings(); OperationBinding ob = bindings.getOperationBinding("Commit"); ob.execute(); } } public void setDeptPopUpBind(RichPopup deptPopUpBind) { this.deptPopUpBind = deptPopUpBind; } public RichPopup getDeptPopUpBind() { return deptPopUpBind; } }
- Now see that how many departments are listed currently in LOV
- Now click on Add Department link and add a department
- Again see the listed departments- Oracle ADF Tutorial is added in now list
Sample ADF Application- Download
what about showing the name of the department rather than the code in the list after selection
ReplyDeleteHi Tokando
DeleteCheck this post - ADF Basics: Use transient attribute to show description of selected value in case of input and combo Lov
Thanks
How do I get the af:inputComboboxListOfValues to be refreshed after adding? I tried AdfFacesContext.getCurrentInstance().addPartialTarget() but not working.
ReplyDeleteIs it not refreshing automatically after commit?
DeleteHave you checked sample application ?