Hello All
Dropped Departments ViewObject on page as af:table and defined custom selection listener of af:table in managed bean
Packages Used-
Code for af:table Selection Listener-
Dropped a button on page to call Next Operation and execute selection listener programmatically
Here I am calling default Next operation on af:table to select next row in rowset programmtically
and as user is not selecting row manually so selection listener will not execute that's why we have to create and queue selection event programmatically
Now Bind af:table to managed bean and write code on button ActionListener to queue table selection listener
Now run and check application , Click on Move Next button and see current row is changed to Marketing
and here custom selection listener prints selected Department Name
Sample ADF Application -Download
Cheers :) Happy Learning
Hope you all are doing good :)
Previously I have posted about defining custom selection listener for af:table and perform desired operation on selection event of table row
Selection Listener is fired when server receives a selection event from client means whenever user selects a row in table (Selection Event) then server process that event and execute selection listener defined in managed bean
And this post is about creating selection event programmatically without user interaction with table.
In ADF we can queue ActionEvent , ValueChangeEvent and in same manner we can create and queue SelectionEvent programmatically
So for this I have Created a Fusion Web Application and prepared model using Departments table of HR Schema
Dropped Departments ViewObject on page as af:table and defined custom selection listener of af:table in managed bean
Packages Used-
import java.util.ArrayList; import java.util.List; import javax.el.ELContext; import javax.el.ExpressionFactory; import javax.el.MethodExpression; import javax.el.ValueExpression; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import oracle.adf.model.BindingContext; import oracle.adf.model.binding.DCIteratorBinding; import oracle.adf.view.rich.component.rich.data.RichTable; import oracle.binding.BindingContainer; import oracle.binding.OperationBinding; import oracle.jbo.Key; import oracle.jbo.Row; import org.apache.myfaces.trinidad.event.SelectionEvent; import org.apache.myfaces.trinidad.model.RowKeySet; import org.apache.myfaces.trinidad.model.RowKeySetImpl;
Code for af:table Selection Listener-
/** * Programmatic evaluation of EL. * * @param el EL to evaluate * @return Result of the evaluation */ public static Object evaluateEL(String el) { FacesContext facesContext = FacesContext.getCurrentInstance(); ELContext elContext = facesContext.getELContext(); ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory(); ValueExpression exp = expressionFactory.createValueExpression(elContext, el, Object.class); return exp.getValue(elContext); } /** * Programmatic invocation of a method that an EL evaluates to. * * @param el EL of the method to invoke * @param paramTypes Array of Class defining the types of the parameters * @param params Array of Object defining the values of the parametrs * @return Object that the method returns */ public static Object invokeEL(String el, Class[] paramTypes, Object[] params) { FacesContext facesContext = FacesContext.getCurrentInstance(); ELContext elContext = facesContext.getELContext(); ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory(); MethodExpression exp = expressionFactory.createMethodExpression(elContext, el, Object.class, paramTypes); return exp.invoke(elContext, params); } /**Custom Selection Listener for Department Table * @param selectionEvent */ public void deptTabCustomSelectionListener(SelectionEvent selectionEvent) { //To make selected row as Current invokeEL("#{bindings.Departments1.collectionModel.makeCurrent}", new Class[] { SelectionEvent.class }, new Object[] { selectionEvent }); // Get the selected row , by this you can get any attribute of that row Row selectedRow = (Row) evaluateEL("#{bindings.Departments1Iterator.currentRow}"); System.out.println("SELECTED DEPARTMENT IS- " + selectedRow.getAttribute("DepartmentName")); }
Dropped a button on page to call Next Operation and execute selection listener programmatically
Here I am calling default Next operation on af:table to select next row in rowset programmtically
and as user is not selecting row manually so selection listener will not execute that's why we have to create and queue selection event programmatically
Now Bind af:table to managed bean and write code on button ActionListener to queue table selection listener
//Component Binding of Department Table private RichTable deptTableBind; public void setDeptTableBind(RichTable deptTableBind) { this.deptTableBind = deptTableBind; } public RichTable getDeptTableBind() { return deptTableBind; } public QueueSelectionListenerBean() { } /**Method to return BindingContainer * @return */ public BindingContainer getBindingsCont() { return BindingContext.getCurrent().getCurrentBindingsEntry(); } /** * Generic Method to get OperationBinding * */ public OperationBinding executeOperation(String operation) { OperationBinding createParam = getBindingsCont().getOperationBinding(operation); return createParam; } /**Method to queue table selection listener programmatically * @param actionEvent */ public void callSelectionListenerAction(ActionEvent actionEvent) { executeOperation("Next").execute(); try { DCIteratorBinding deptIter = (DCIteratorBinding) getBindingsCont().get("Departments1Iterator"); Row currentRow = deptIter.getCurrentRow(); //List to store table RowKey List rowKeyList = new ArrayList(); if (currentRow != null) { //Add current row primary key to RowKeyList to form Old Key List Key jboKey = new Key(new Object[] { currentRow.getAttribute("DepartmentId") }); rowKeyList.add(jboKey); RowKeySet newRks = new RowKeySetImpl(); newRks.add(rowKeyList); //Create SelectionEvent Object and put necessary values SelectionEvent selectionEvent = new SelectionEvent(deptTableBind.getSelectedRowKeys(), newRks, deptTableBind); //Queue Selection Event selectionEvent.queue(); } } catch (Exception e) { System.out.println(e); } }
Now run and check application , Click on Move Next button and see current row is changed to Marketing
and here custom selection listener prints selected Department Name
Sample ADF Application -Download
Cheers :) Happy Learning
No comments :
Post a Comment