Hello All ,
previously i had a requirement of validating af:query fields so i have found two ways to do that
see -Overriding default query listener ,field validation of af:query- Oracle ADF
now i have to set some values in af:query when user clicks on Reset button of query so to do that i have to override default QueryOperationListener in order to handle QueryOperationEvent
Oracle docs says-
af:query- The query component provides the user the ability to perform a query based on a saved search or personalize saved searches in Oracle ADF. The component displays a search panel with various elements, each of which help the user to accomplish various tasks.
QueryOperationListener- QueryOperationListener class. A registered queryOperationListener is invoked when the user's action results a queue and broadcast of QueryOpertionEvent on the component. For example, click the delete icon in the QuickCriteria component or click "Save", "Reset" etc buttons in Query component to perform a Query Operation.
QueryOperationEvent-A user can perform various operations on saved searches while interacting with a query component. These actions include creating, overriding, deleting, duplicating, selecting, resetting and updating a saved search
want to read more-
http://docs.oracle.com/cd/E17904_01/apirefs.1111/e10684/oracle/adf/view/rich/event/QueryOperationListener.html
http://jdevadf.oracle.com/adf-richclient-demo/docs/apidocs/oracle/adf/view/rich/event/QueryOperationEvent.html
so i have created a QueryOperationListener in managed bean that communicates with QueryOperationEvent
in this method we can capture various events of af:query as reset,update
so for this use-case i have to capture reset and set desired values in query attribute (viewObject's bind variable) , here i am using Departments table of HR Schema
now see the code (i have to set Human Resource department on reset in search panel) - how to capture raised event when user clicks on Reset button of af:query
to invoke Expression use this method
now run this page and check on click of reset button this listener is invoked and sets the value of af:query field
Default page view -on-load
after click on Reset-
other than this reset we can handle other events of af:query (for saved search there are various events based on corresponding operations) as DELETE, UPDATE, CREATE
on clicking various button of this personalized search box we get respective operation name in managed bean and can handle as done for RESET operation
Changing mode of default search panel (af:query) of ADF-
this is nothing but 2 lines that changes the mode of af:query - Basic to Advanced & Advanced to Basic
so dropped a button on page to change af:query search mode and see the code of ActionListener for this
now run page and see-
Cheers - Happy learning :-) Download Sample ADF App
previously i had a requirement of validating af:query fields so i have found two ways to do that
see -Overriding default query listener ,field validation of af:query- Oracle ADF
now i have to set some values in af:query when user clicks on Reset button of query so to do that i have to override default QueryOperationListener in order to handle QueryOperationEvent
Oracle docs says-
af:query- The query component provides the user the ability to perform a query based on a saved search or personalize saved searches in Oracle ADF. The component displays a search panel with various elements, each of which help the user to accomplish various tasks.
QueryOperationListener- QueryOperationListener class. A registered queryOperationListener is invoked when the user's action results a queue and broadcast of QueryOpertionEvent on the component. For example, click the delete icon in the QuickCriteria component or click "Save", "Reset" etc buttons in Query component to perform a Query Operation.
QueryOperationEvent-A user can perform various operations on saved searches while interacting with a query component. These actions include creating, overriding, deleting, duplicating, selecting, resetting and updating a saved search
want to read more-
http://docs.oracle.com/cd/E17904_01/apirefs.1111/e10684/oracle/adf/view/rich/event/QueryOperationListener.html
http://jdevadf.oracle.com/adf-richclient-demo/docs/apidocs/oracle/adf/view/rich/event/QueryOperationEvent.html
so i have created a QueryOperationListener in managed bean that communicates with QueryOperationEvent
in this method we can capture various events of af:query as reset,update
so for this use-case i have to capture reset and set desired values in query attribute (viewObject's bind variable) , here i am using Departments table of HR Schema
/**Custom QueryOperationListener that hadles variois events raised by af:query * @param queryOperationEvent */ public void deptSeacrhQueryOperationList(QueryOperationEvent queryOperationEvent) { //Invoke default operation listener invokeEL("#{bindings.DepartmentsVOCriteriaQuery.processQueryOperation}", Object.class, QueryOperationEvent.class, queryOperationEvent); System.out.println("Query Event is-" + queryOperationEvent.getOperation().name()); //Check that current operation is RESET if (queryOperationEvent.getOperation().name().equalsIgnoreCase("RESET")) { DCIteratorBinding iter = (DCIteratorBinding) getBindings().get("Departments1Iterator"); ViewObjectImpl vo = (ViewObjectImpl) iter.getViewObject(); // Setting the value of bind variable vo.ensureVariableManager().setVariableValue("BindDeptNm", "Human Resource"); } }
to invoke Expression use this method
/** * @param expr * @param returnType * @param argTypes * @param args * @return */ public Object invokeMethodExpression(String expr, Class returnType, Class[] argTypes, Object[] args) { FacesContext fc = FacesContext.getCurrentInstance(); ELContext elctx = fc.getELContext(); ExpressionFactory elFactory = fc.getApplication().getExpressionFactory(); MethodExpression methodExpr = elFactory.createMethodExpression(elctx, expr, returnType, argTypes); return methodExpr.invoke(elctx, args); } /** * @param expr * @param returnType * @param argType * @param argument * @return */ public Object invokeEL(String expr, Class returnType, Class argType, Object argument) { return invokeMethodExpression(expr, returnType, new Class[] { argType }, new Object[] { argument }); }
now run this page and check on click of reset button this listener is invoked and sets the value of af:query field
Default page view -on-load
after click on Reset-
other than this reset we can handle other events of af:query (for saved search there are various events based on corresponding operations) as DELETE, UPDATE, CREATE
on clicking various button of this personalized search box we get respective operation name in managed bean and can handle as done for RESET operation
Changing mode of default search panel (af:query) of ADF-
this is nothing but 2 lines that changes the mode of af:query - Basic to Advanced & Advanced to Basic
so dropped a button on page to change af:query search mode and see the code of ActionListener for this
//Binding of af:query in managed bean private RichQuery queryPanelDept; public void setQueryPanelDept(RichQuery queryPanelDept) { this.queryPanelDept = queryPanelDept; } public RichQuery getQueryPanelDept() { return queryPanelDept; }
private String current_mode = "B"; /**Method Action to change mode of af:query * @param actionEvent */ public void changeModeAction(ActionEvent actionEvent) { if (current_mode == "B") { getQueryPanelDept().getValue().changeMode(QueryDescriptor.QueryMode.ADVANCED); current_mode = "A"; } else if (current_mode == "A") { getQueryPanelDept().getValue().changeMode(QueryDescriptor.QueryMode.BASIC); current_mode = "B"; } }
now run page and see-
Cheers - Happy learning :-) Download Sample ADF App