ADF for Dummies

Passing Variables to other pages

Let us see how we can pass variables from one page to another which are in same ADF taskflow

1

basically pass variable from page1 to page2

2

We will create MyBean.java and In the adf-config.xml under Managed bean , this variable is to be set to pageFlow Scope

package view;
public class MyBean 
{ private String username; public void setUsername(String username)
{ this.username = username; } public String getUsername()
{ return username; } public MyBean() { } }

Map the variable value of textbox to the username in the bean as shown below

3

we can now retrieve back the value in another page

4

The Input will be

6

t will be as shown below.

 5

Static Data Controls

Sometimes we would need Java based static data control, which could be used to display forms / static data or even graphs .. infact once you have logic for static Java Data controls , the data you can get from other sources like webservices / procedures / sql .. the UI layer can still be the same. To do that let us create 2 static java classes Employee Data Model and Employee Data The Employee Data Model class will have getter and setter methods , similar to database column names, in the constructor we will populate all these variables.

package view; 
import java.util.Date; 
public class EmpDataModel 
{ 
private int empId; 
private String empName; 
private String empDept; 
private int empSalary; 
private Date empDob; 
public EmpDataModel(int empId, String empName, String empDept, int empSalary, Date empDob) 
{ 
this.empId = empId; 
this.empName = empName; 
this.empDept = empDept; 
this.empSalary = empSalary; 
this.empDob = empDob; 
} 
public void setEmpId(int empId) 
{ 
this.empId = empId; 
} 
public int getEmpId() 
{ 
return empId; 
} 
public void setEmpName(String empName) 
{ 
this.empName = empName; 
} 
public String getEmpName() 
{ 
return empName; 
} 
public void setEmpDept(String empDept) 
{ 
this.empDept = empDept; 
} 
public String getEmpDept() 
{ return empDept; } 
public void setEmpSalary(int empSalary) 
{ this.empSalary = empSalary; } 
public int getEmpSalary() 
{ return empSalary; } 
public void setEmpDob(Date empDob) 
{ this.empDob = empDob; } 
public Date getEmpDob() 
{ 
return empDob; 
} 
} 

Employee Static Data will basically populate the values for Employee Data Model class as shown below,

 
package view; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 
import java.util.regex.Pattern; 
public class EmpStaticData 
{ List emplist = new ArrayList(); 
public EmpStaticData() 
{ String dobStr1="09/25/1973"; 
String dobStr2="09/15/1983";
Date dobDate1 = null; 
Date dobDate2 = null; 
DateFormat formatter; 
formatter = new SimpleDateFormat("MM/dd/yyyy"); 
try 
{ 
dobDate1 = (Date)formatter.parse(dobStr1); 
dobDate2 = (Date)formatter.parse(dobStr2); 
} 
catch (Exception e) 
{ e.printStackTrace(); 
} 
//int empId, String empName, String empDept, int empSalary, 
Date empDob emplist.add (new EmpDataModel(21288, "James Smith", "Engineering", 55000, dobDate1 )); 
emplist.add (new EmpDataModel(21299, "Peter Parker", "Sales", 65000, dobDate2)); } 
public List showAllEmployees() { return emplist; } 
} 

Once our Java classes are ready we will use
Employee static data class to generate datacontrol by as shown below

7

Drag and Drop the data on the page as form as well as graph

8

Passing data using setPropertyListener

Sometimes , it also becomes critical to pass data to another page , using From and To values , where From value can be from any data source and To value can be directly written into pageflow scope , usually this is handled by a button click invoking set Property Listener [xml] <af:button text=”Greet” id=”b5″ action=”3to2″> <af:setPropertyListener from=”#{bindings.empName.inputValue}” to=”#{pageFlowScope.MyBean.username}” type=”action”/> </af:button> [/xml]

Using ADF Utils and Bindings to access page variables.

create Java CLass ADFUtils [java] package view; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.el.ELContext; import javax.el.ExpressionFactory; import javax.el.MethodExpression; import javax.el.ValueExpression; import javax.faces.context.FacesContext; import javax.faces.model.SelectItem; import oracle.adf.model.BindingContext; import oracle.adf.model.binding.DCBindingContainer; import oracle.adf.model.binding.DCIteratorBinding; import oracle.adf.model.binding.DCParameter; import oracle.adf.share.logging.ADFLogger; import oracle.adf.view.rich.context.AdfFacesContext; import oracle.binding.AttributeBinding; import oracle.binding.BindingContainer; import oracle.binding.ControlBinding; import oracle.binding.OperationBinding; import oracle.binding.RangeBinding; import oracle.jbo.ApplicationModule; import oracle.jbo.Key; import oracle.jbo.Row; import oracle.jbo.uicli.binding.JUCtrlValueBinding; public final class ADFUtils { public static final ADFLogger LOGGER = ADFLogger.createADFLogger(ADFUtils.class); private ADFUtils() { super(); } /** * 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. * The method must not take any parameters. * * @param el EL of the method to invoke * @return Object that the method returns */ public static Object invokeEL(String el) { return invokeEL(el, new Class[0], new Object[0]); } /** * 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); } /** * Sets a value into an EL object. Provides similar functionality to * the <af:setActionListener> tag, except the from is * not an EL. You can get similar behavior by using the following… * setEL(to, evaluateEL(from)) * * @param el EL object to assign a value * @param val Value to assign */ public static void setEL(String el, Object val) { FacesContext facesContext = FacesContext.getCurrentInstance(); ELContext elContext = facesContext.getELContext(); ExpressionFactory expressionFactory = facesContext.getApplication().getExpressionFactory(); ValueExpression exp = expressionFactory.createValueExpression(elContext, el, Object.class); exp.setValue(elContext, val); } /** * Execute an operation binding in the current binding container by operation name. * @param operationBinding operation binding name * @return operation binding execution result */ public static Object executeOperationBinding(String operationBinding) { return findOperation(operationBinding).execute(); } /** * Get application module for an application module data control by name. * @param name application module data control name * @return ApplicationModule */ public static ApplicationModule getApplicationModuleForDataControl(String name) { return (ApplicationModule)JSFUtils.resolveExpression(“#{data.” + name + “.dataProvider}”); } /** * A convenience method for getting the value of a bound attribute in the * current page context programatically. * @param attributeName of the bound value in the pageDef * @return value of the attribute */ public static Object getBoundAttributeValue(String attributeName) { return findControlBinding(attributeName).getInputValue(); } /** * A convenience method for getting the values of a bound tree in the * current page context programatically. * @param treeName of the bound tree in the pageDef * @return value of the attribute */ public static List<Object> getBoundTree(String treeName) { Map map; List<Object> returnList = new ArrayList<Object>(); for (Object o : findRangeControlBinding(treeName).getRangeSet()) { map = (Map)o; for (Object oo : (Object[])map.get(“attributeValues”)) { returnList.add(oo); } } return returnList; } /** * A convenience method for setting the value of a bound attribute in the * context of the current page. * @param attributeName of the bound value in the pageDef * @param value to set */ public static void setBoundAttributeValue(String attributeName, Object value) { findControlBinding(attributeName).setInputValue(value); } /** * Returns the evaluated value of a pageDef parameter. * @param pageDefName reference to the page definition file of the page with the parameter * @param parameterName name of the pagedef parameter * @return evaluated value of the parameter as a String */ public static Object getPageDefParameterValue(String pageDefName, String parameterName) { BindingContainer bindings = findBindingContainer(pageDefName); DCParameter param = ((DCBindingContainer)bindings).findParameter(parameterName); return param.getValue(); } /** * Convenience method to find a DCControlBinding as an AttributeBinding * to get able to then call getInputValue() or setInputValue() on it. * @param bindingContainer binding container * @param attributeName name of the attribute binding. * @return the control value binding with the name passed in. * */ public static AttributeBinding findControlBinding(BindingContainer bindingContainer, String attributeName) { if (attributeName != null) { if (bindingContainer != null) { ControlBinding ctrlBinding = bindingContainer.getControlBinding(attributeName); if (ctrlBinding instanceof AttributeBinding) { return (AttributeBinding)ctrlBinding; } } } return null; } /** * Convenience method to find a DCControlBinding as an RangeBinding * to get able to then call getRangeSet() on it. * @param bindingContainer binding container * @param treeName name of the tree binding. * @return the control value binding with the name passed in. * */ public static RangeBinding findRangeControlBinding(BindingContainer bindingContainer, String treeName) { if (treeName != null) { if (bindingContainer != null) { ControlBinding ctrlBinding = bindingContainer.getControlBinding(treeName); if (ctrlBinding instanceof RangeBinding) { return (RangeBinding)ctrlBinding; } } } return null; } /** * Convenience method to find a DCControlBinding as a JUCtrlValueBinding * to get able to then call getInputValue() or setInputValue() on it. * @param attributeName name of the attribute binding. * @return the control value binding with the name passed in. * */ public static AttributeBinding findControlBinding(String attributeName) { return findControlBinding(getBindingContainer(), attributeName); } /** * Convenience method to find a DCControlBinding as a JUCtrlValueBinding * to get able to then call getRangeSet() on it. * @param treeName name of the tree binding. * @return the control value binding with the name passed in. * */ public static RangeBinding findRangeControlBinding(String treeName) { return findRangeControlBinding(getBindingContainer(), treeName); } /** * Return the current page’s binding container. * @return the current page’s binding container */ public static BindingContainer getBindingContainer() { return (BindingContainer)JSFUtils.resolveExpression(“#{bindings}”); } /** * Return the Binding Container as a DCBindingContainer. * @return current binding container as a DCBindingContainer */ public static DCBindingContainer getDCBindingContainer() { return (DCBindingContainer)getBindingContainer(); } /** * Get List of ADF Faces SelectItem for an iterator binding. * * Uses the value of the ‘valueAttrName’ attribute as the key for * the SelectItem key. * * @param iteratorName ADF iterator binding name * @param valueAttrName name of the value attribute to use * @param displayAttrName name of the attribute from iterator rows to display * @return ADF Faces SelectItem for an iterator binding */ public static List<SelectItem> selectItemsForIterator(String iteratorName, String valueAttrName, String displayAttrName) { return selectItemsForIterator(findIterator(iteratorName), valueAttrName, displayAttrName); } /** * Get List of ADF Faces SelectItem for an iterator binding with description. * * Uses the value of the ‘valueAttrName’ attribute as the key for * the SelectItem key. * * @param iteratorName ADF iterator binding name * @param valueAttrName name of the value attribute to use * @param displayAttrName name of the attribute from iterator rows to display * @param descriptionAttrName name of the attribute to use for description * @return ADF Faces SelectItem for an iterator binding with description */ public static List<SelectItem> selectItemsForIterator(String iteratorName, String valueAttrName, String displayAttrName, String descriptionAttrName) { return selectItemsForIterator(findIterator(iteratorName), valueAttrName, displayAttrName, descriptionAttrName); } /** * Get List of attribute values for an iterator. * @param iteratorName ADF iterator binding name * @param valueAttrName value attribute to use * @return List of attribute values for an iterator */ public static List attributeListForIterator(String iteratorName, String valueAttrName) { return attributeListForIterator(findIterator(iteratorName), valueAttrName); } /** * Get List of Key objects for rows in an iterator. * @param iteratorName iterabot binding name * @return List of Key objects for rows */ public static List<Key> keyListForIterator(String iteratorName) { return keyListForIterator(findIterator(iteratorName)); } /** * Get List of Key objects for rows in an iterator. * @param iter iterator binding * @return List of Key objects for rows */ public static List<Key> keyListForIterator(DCIteratorBinding iter) { List<Key> attributeList = new ArrayList<Key>(); for (Row r : iter.getAllRowsInRange()) { attributeList.add(r.getKey()); } return attributeList; } /** * Get List of Key objects for rows in an iterator using key attribute. * @param iteratorName iterator binding name * @param keyAttrName name of key attribute to use * @return List of Key objects for rows */ public static List<Key> keyAttrListForIterator(String iteratorName, String keyAttrName) { return keyAttrListForIterator(findIterator(iteratorName), keyAttrName); } /** * Get List of Key objects for rows in an iterator using key attribute. * * @param iter iterator binding * @param keyAttrName name of key attribute to use * @return List of Key objects for rows */ public static List<Key> keyAttrListForIterator(DCIteratorBinding iter, String keyAttrName) { List<Key> attributeList = new ArrayList<Key>(); for (Row r : iter.getAllRowsInRange()) { attributeList.add(new Key(new Object[] { r.getAttribute(keyAttrName) })); } return attributeList; } /** * Get a List of attribute values for an iterator. * * @param iter iterator binding * @param valueAttrName name of value attribute to use * @return List of attribute values */ public static List attributeListForIterator(DCIteratorBinding iter, String valueAttrName) { List attributeList = new ArrayList(); for (Row r : iter.getAllRowsInRange()) { attributeList.add(r.getAttribute(valueAttrName)); } return attributeList; } /** * Find an iterator binding in the current binding container by name. * * @param iteratorName iterator binding name * @return iterator binding */ public static DCIteratorBinding findIterator(String iteratorName) { DCIteratorBinding iter = getDCBindingContainer().findIteratorBinding(iteratorName); if (iter == null) { throw new RuntimeException(“Iterator ‘” + iteratorName + “‘ not found”); } return iter; } public static DCIteratorBinding findIterator(String bindingContainer, String iteratorName) { DCBindingContainer bindings = (DCBindingContainer)JSFUtils.resolveExpression(“#{” + bindingContainer + “}”); if (bindings == null) { throw new RuntimeException(“Binding container ‘” + bindingContainer + “‘ not found”); } DCIteratorBinding iter = bindings.findIteratorBinding(iteratorName); if (iter == null) { throw new RuntimeException(“Iterator ‘” + iteratorName + “‘ not found”); } return iter; } public static JUCtrlValueBinding findCtrlBinding(String ctrlBindingName) { JUCtrlValueBinding rowBinding = (JUCtrlValueBinding)getDCBindingContainer().findCtrlBinding(ctrlBindingName); if (rowBinding == null) { throw new RuntimeException(“CtrlBinding ” + ctrlBindingName + “‘ not found”); } return rowBinding; } /** * Find an operation binding in the current binding container by name. * @param operationName operation binding name * @return operation binding */ public static OperationBinding findOperation(String operationName) { OperationBinding op = getDCBindingContainer().getOperationBinding(operationName); if (op == null) { throw new RuntimeException(“Operation ‘” + operationName + “‘ not found”); } return op; } /** * Find an operation binding in the current binding container by name. * * @param bindingContianer binding container name * @param operationName operation binding name * @return operation binding */ public static OperationBinding findOperation(String bindingContianer, String operationName) { DCBindingContainer bindings = (DCBindingContainer)JSFUtils.resolveExpression(“#{” + bindingContianer + “}”); if (bindings == null) { throw new RuntimeException(“Binding container ‘” + bindingContianer + “‘ not found”); } OperationBinding op = bindings.getOperationBinding(operationName); if (op == null) { throw new RuntimeException(“Operation ‘” + operationName + “‘ not found”); } return op; } /** * Get List of ADF Faces SelectItem for an iterator binding with description. * * Uses the value of the ‘valueAttrName’ attribute as the key for * the SelectItem key. * * @param iter ADF iterator binding * @param valueAttrName name of value attribute to use for key * @param displayAttrName name of the attribute from iterator rows to display * @param descriptionAttrName name of the attribute for description * @return ADF Faces SelectItem for an iterator binding with description */ public static List<SelectItem> selectItemsForIterator(DCIteratorBinding iter, String valueAttrName, String displayAttrName, String descriptionAttrName) { List<SelectItem> selectItems = new ArrayList<SelectItem>(); for (Row r : iter.getAllRowsInRange()) { selectItems.add(new SelectItem(r.getAttribute(valueAttrName), (String)r.getAttribute(displayAttrName), (String)r.getAttribute(descriptionAttrName))); } return selectItems; } /** * Get List of ADF Faces SelectItem for an iterator binding. * * Uses the value of the ‘valueAttrName’ attribute as the key for * the SelectItem key. * * @param iter ADF iterator binding * @param valueAttrName name of value attribute to use for key * @param displayAttrName name of the attribute from iterator rows to display * @return ADF Faces SelectItem for an iterator binding */ public static List<SelectItem> selectItemsForIterator(DCIteratorBinding iter, String valueAttrName, String displayAttrName) { List<SelectItem> selectItems = new ArrayList<SelectItem>(); for (Row r : iter.getAllRowsInRange()) { selectItems.add(new SelectItem(r.getAttribute(valueAttrName), (String)r.getAttribute(displayAttrName))); } return selectItems; } /** * Get List of ADF Faces SelectItem for an iterator binding. * * Uses the rowKey of each row as the SelectItem key. * * @param iteratorName ADF iterator binding name * @param displayAttrName name of the attribute from iterator rows to display * @return ADF Faces SelectItem for an iterator binding */ public static List<SelectItem> selectItemsByKeyForIterator(String iteratorName, String displayAttrName) { return selectItemsByKeyForIterator(findIterator(iteratorName), displayAttrName); } /** * Get List of ADF Faces SelectItem for an iterator binding with discription. * * Uses the rowKey of each row as the SelectItem key. * * @param iteratorName ADF iterator binding name * @param displayAttrName name of the attribute from iterator rows to display * @param descriptionAttrName name of the attribute for description * @return ADF Faces SelectItem for an iterator binding with discription */ public static List<SelectItem> selectItemsByKeyForIterator(String iteratorName, String displayAttrName, String descriptionAttrName) { return selectItemsByKeyForIterator(findIterator(iteratorName), displayAttrName, descriptionAttrName); } /** * Get List of ADF Faces SelectItem for an iterator binding with discription. * * Uses the rowKey of each row as the SelectItem key. * * @param iterator ADF iterator binding * @param displayAttrName name of the attribute from iterator rows to display * @param descriptionAttrName name of the attribute for description * @return ADF Faces SelectItem for an iterator binding with discription */ public static List<SelectItem> selectItemsByKeyForIterator(DCIteratorBinding iterator, String displayAttrName, String descriptionAttrName) { List<SelectItem> selectItems = new ArrayList<SelectItem>(); for (Row r : iterator.getAllRowsInRange()) { selectItems.add(new SelectItem(r.getKey(), (String)r.getAttribute(displayAttrName), (String)r.getAttribute(descriptionAttrName))); } return selectItems; } /** * Get List of ADF Faces SelectItem for an iterator binding. * * Uses the rowKey of each row as the SelectItem key. * * @param iterator ADF iterator binding * @param displayAttrName name of the attribute from iterator rows to display * @return List of ADF Faces SelectItem for an iterator binding */ public static List<SelectItem> selectItemsByKeyForIterator(DCIteratorBinding iterator, String displayAttrName) { List<SelectItem> selectItems = new ArrayList<SelectItem>(); for (Row r : iterator.getAllRowsInRange()) { selectItems.add(new SelectItem(r.getKey(), (String)r.getAttribute(displayAttrName))); } return selectItems; } /** * Find the BindingContainer for a page definition by name. * * Typically used to refer eagerly to page definition parameters. It is * not best practice to reference or set bindings in binding containers * that are not the one for the current page. * * @param pageDefName name of the page defintion XML file to use * @return BindingContainer ref for the named definition */ private static BindingContainer findBindingContainer(String pageDefName) { BindingContext bctx = getDCBindingContainer().getBindingContext(); BindingContainer foundContainer = bctx.findBindingContainer(pageDefName); return foundContainer; } public static void printOperationBindingExceptions(List operationsList) { if (operationsList != null && !operationsList.isEmpty()) { for (Object error : operationsList) { LOGGER.severe(error.toString()); } } } public static Object getPageFlowScopeAttribute(String key) { AdfFacesContext adfFacesCtx = AdfFacesContext.getCurrentInstance(); return adfFacesCtx.getPageFlowScope().get(key); } public static void putPageFlowScopeAttribute(String key, Object value) { AdfFacesContext.getCurrentInstance().getPageFlowScope().put(key, value); } public static Object getViewScopeAttribute(String key) { AdfFacesContext adfFacesCtx = AdfFacesContext.getCurrentInstance(); return adfFacesCtx.getViewScope().get(key); } public static void putViewScopeAttribute(String key, Object value) { AdfFacesContext.getCurrentInstance().getViewScope().put(key, value); } } [/java] Create one more class JSFUtils [java] package view; import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.MissingResourceException; import java.util.ResourceBundle; import javax.el.ELContext; import javax.el.ExpressionFactory; import javax.el.MethodExpression; import javax.el.ValueExpression; import javax.faces.application.Application; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.component.UIViewRoot; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletRequest; import oracle.adf.share.logging.ADFLogger; public final class JSFUtils { public static final ADFLogger LOGGER = ADFLogger.createADFLogger(JSFUtils.class); private static final String NO_RESOURCE_FOUND = “Missing resource: “; private JSFUtils() { super(); } /** * Method for taking a reference to a JSF binding expression and returning * the matching object (or creating it). * @param expression EL expression * @return Managed object */ public static Object resolveExpression(String expression) { FacesContext facesContext = getFacesContext(); Application app = facesContext.getApplication(); ExpressionFactory elFactory = app.getExpressionFactory(); ELContext elContext = facesContext.getELContext(); ValueExpression valueExp = elFactory.createValueExpression(elContext, expression, Object.class); return valueExp.getValue(elContext); } public static String resolveRemoteUser() { FacesContext facesContext = getFacesContext(); ExternalContext ectx = facesContext.getExternalContext(); return ectx.getRemoteUser(); } public static String resolveUserPrincipal() { FacesContext facesContext = getFacesContext(); ExternalContext ectx = facesContext.getExternalContext(); HttpServletRequest request = (HttpServletRequest)ectx.getRequest(); return request.getUserPrincipal().getName(); } public static Object resloveMethodExpression(String expression, Class returnType, Class[] argTypes, Object[] argValues) { FacesContext facesContext = getFacesContext(); Application app = facesContext.getApplication(); ExpressionFactory elFactory = app.getExpressionFactory(); ELContext elContext = facesContext.getELContext(); MethodExpression methodExpression = elFactory.createMethodExpression(elContext, expression, returnType, argTypes); return methodExpression.invoke(elContext, argValues); } /** * Method for taking a reference to a JSF binding expression and returning * the matching Boolean. * @param expression EL expression * @return Managed object */ public static Boolean resolveExpressionAsBoolean(String expression) { return (Boolean)resolveExpression(expression); } /** * Method for taking a reference to a JSF binding expression and returning * the matching String (or creating it). * @param expression EL expression * @return Managed object */ public static String resolveExpressionAsString(String expression) { return (String)resolveExpression(expression); } /** * Convenience method for resolving a reference to a managed bean by name * rather than by expression. * @param beanName name of managed bean * @return Managed object */ public static Object getManagedBeanValue(String beanName) { StringBuffer buff = new StringBuffer(“#{“); buff.append(beanName); buff.append(“}”); return resolveExpression(buff.toString()); } /** * Method for setting a new object into a JSF managed bean * Note: will fail silently if the supplied object does * not match the type of the managed bean. * @param expression EL expression * @param newValue new value to set */ public static void setExpressionValue(String expression, Object newValue) { FacesContext facesContext = getFacesContext(); Application app = facesContext.getApplication(); ExpressionFactory elFactory = app.getExpressionFactory(); ELContext elContext = facesContext.getELContext(); ValueExpression valueExp = elFactory.createValueExpression(elContext, expression, Object.class); //Check that the input newValue can be cast to the property type //expected by the managed bean. //If the managed Bean expects a primitive we rely on Auto-Unboxing Class bindClass = valueExp.getType(elContext); if (bindClass.isPrimitive() || bindClass.isInstance(newValue)) { valueExp.setValue(elContext, newValue); } } /** * Convenience method for setting the value of a managed bean by name * rather than by expression. * @param beanName name of managed bean * @param newValue new value to set */ public static void setManagedBeanValue(String beanName, Object newValue) { StringBuffer buff = new StringBuffer(“#{“); buff.append(beanName); buff.append(“}”); setExpressionValue(buff.toString(), newValue); } /** * Convenience method for setting Session variables. * @param key object key * @param object value to store */ public static void storeOnSession(String key, Object object) { FacesContext ctx = getFacesContext(); Map sessionState = ctx.getExternalContext().getSessionMap(); sessionState.put(key, object); } /** * Convenience method for getting Session variables. * @param key object key * @return session object for key */ public static Object getFromSession(String key) { FacesContext ctx = getFacesContext(); Map sessionState = ctx.getExternalContext().getSessionMap(); return sessionState.get(key); } public static String getFromHeader(String key) { FacesContext ctx = getFacesContext(); ExternalContext ectx = ctx.getExternalContext(); return ectx.getRequestHeaderMap().get(key); } /** * Convenience method for getting Request variables. * @param key object key * @return session object for key */ public static Object getFromRequest(String key) { FacesContext ctx = getFacesContext(); Map sessionState = ctx.getExternalContext().getRequestMap(); return sessionState.get(key); } /** * Pulls a String resource from the property bundle that * is defined under the application &lt;message-bundle&gt; element in * the faces config. Respects Locale * @param key string message key * @return Resource value or placeholder error String */ public static String getStringFromBundle(String key) { ResourceBundle bundle = getBundle(); return getStringSafely(bundle, key, null); } /** * Convenience method to construct a <code>FacesMesssage</code> * from a defined error key and severity * This assumes that the error keys follow the convention of * using <b>_detail</b> for the detailed part of the * message, otherwise the main message is returned for the * detail as well. * @param key for the error message in the resource bundle * @param severity severity of message * @return Faces Message object */ public static FacesMessage getMessageFromBundle(String key, FacesMessage.Severity severity) { ResourceBundle bundle = getBundle(); String summary = getStringSafely(bundle, key, null); String detail = getStringSafely(bundle, key + “_detail”, summary); FacesMessage message = new FacesMessage(summary, detail); message.setSeverity(severity); return message; } /** * Add JSF info message. * @param msg info message string */ public static void addFacesInformationMessage(String msg) { FacesContext ctx = getFacesContext(); FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_INFO, msg, “”); ctx.addMessage(getRootViewComponentId(), fm); } /** * Add JSF error message. * @param msg error message string */ public static void addFacesErrorMessage(String msg) { FacesContext ctx = getFacesContext(); FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, “”); ctx.addMessage(getRootViewComponentId(), fm); } /** * Add JSF error message for a specific attribute. * @param attrName name of attribute * @param msg error message string */ public static void addFacesErrorMessage(String attrName, String msg) { FacesContext ctx = getFacesContext(); FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, attrName, msg); ctx.addMessage(getRootViewComponentId(), fm); } // Informational getters /** * Get view id of the view root. * @return view id of the view root */ public static String getRootViewId() { return getFacesContext().getViewRoot().getViewId(); } /** * Get component id of the view root. * @return component id of the view root */ public static String getRootViewComponentId() { return getFacesContext().getViewRoot().getId(); } /** * Get FacesContext. * @return FacesContext */ public static FacesContext getFacesContext() { return FacesContext.getCurrentInstance(); } /* * Internal method to pull out the correct local * message bundle */ private static ResourceBundle getBundle() { FacesContext ctx = getFacesContext(); UIViewRoot uiRoot = ctx.getViewRoot(); Locale locale = uiRoot.getLocale(); ClassLoader ldr = Thread.currentThread().getContextClassLoader(); return ResourceBundle.getBundle(ctx.getApplication().getMessageBundle(), locale, ldr); } /** * Get an HTTP Request attribute. * @param name attribute name * @return attribute value */ public static Object getRequestAttribute(String name) { return getFacesContext().getExternalContext().getRequestMap().get(name); } /** * Set an HTTP Request attribute. * @param name attribute name * @param value attribute value */ public static void setRequestAttribute(String name, Object value) { getFacesContext().getExternalContext().getRequestMap().put(name, value); } /* * Internal method to proxy for resource keys that don’t exist */ private static String getStringSafely(ResourceBundle bundle, String key, String defaultValue) { String resource = null; try { resource = bundle.getString(key); } catch (MissingResourceException mrex) { if (defaultValue != null) { resource = defaultValue; } else { resource = NO_RESOURCE_FOUND + key; } } return resource; } /** * Locate an UIComponent in view root with its component id. Use a recursive way to achieve this. * @param id UIComponent id * @return UIComponent object */ public static UIComponent findComponentInRoot(String id) { UIComponent component = null; FacesContext facesContext = FacesContext.getCurrentInstance(); if (facesContext != null) { UIComponent root = facesContext.getViewRoot(); component = findComponent(root, id); } return component; } /** * Locate an UIComponent from its root component. * Taken from http://www.jroller.com/page/mert?entry=how_to_find_a_uicomponent * @param base root Component (parent) * @param id UIComponent id * @return UIComponent object */ public static UIComponent findComponent(UIComponent base, String id) { if (id.equals(base.getId())) { return base; } UIComponent children = null; UIComponent result = null; Iterator childrens = base.getFacetsAndChildren(); while (childrens.hasNext() && (result == null)) { children = (UIComponent)childrens.next(); if (id.equals(children.getId())) { result = children; break; } result = findComponent(children, id); if (result != null) { break; } } return result; } /** * Method to create a redirect URL. The assumption is that the JSF servlet mapping is * “faces”, which is the default * * @param view the JSP or JSPX page to redirect to * @return a URL to redirect to */ public static String getPageURL(String view) { FacesContext facesContext = getFacesContext(); ExternalContext externalContext = facesContext.getExternalContext(); String url = ((HttpServletRequest)externalContext.getRequest()).getRequestURL().toString(); StringBuffer newUrlBuffer = new StringBuffer(); newUrlBuffer.append(url.substring(0, url.lastIndexOf(“faces/”))); newUrlBuffer.append(“faces”); String targetPageUrl = view.startsWith(“/”) ? view : “/” + view; newUrlBuffer.append(targetPageUrl); return newUrlBuffer.toString(); } /** * Create value binding for EL exression * @param expression * @return Object */ public static Object getExpressionObjectReference(String expression) { FacesContext fc = FacesContext.getCurrentInstance(); ELContext elctx = fc.getELContext(); ExpressionFactory elFactory = fc.getApplication().getExpressionFactory(); return elFactory.createValueExpression(elctx, expression, Object.class).getValue(elctx); } /** * Invokes an expression * @param expr * @param returnType * @param argTypes * @param args * @return */ public static 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); } /** * Invoke an expression * @param expr * @param returnType * @param argType * @param argument * @return */ public static Object invokeMethodExpression(String expr, Class returnType, Class argType, Object argument) { return invokeMethodExpression(expr, returnType, new Class[] { argType }, new Object[] { argument }); } } [/java] Now in our Managed Bean code , on button click we will use these Util classes and get the label as well as form elements So our JSPX page will have this [xml] <af:button text=”Get Emp Details” id=”b6″ action=”#{pageFlowScope.MyBean.empDetails}”/> [/xml] And our Corresponding Java Code will be as shown below [java] package view; import oracle.adf.model.binding.DCBindingContainer; import oracle.adf.model.BindingContext; import oracle.binding.AttributeBinding; public class MyBean { private String username; public void setUsername(String username) { this.username = username; } public String getUsername() { return username; } public MyBean() { } public String empDetails() { DCBindingContainer bindings = ((DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry()); AttributeBinding attrBindingEmpDept = (AttributeBinding) bindings.getControlBinding(“empDept”); System.out.println(“Emp Dept Label is “+attrBindingEmpDept.getLabel()); System.out.println(“Emp Dept Value is “+attrBindingEmpDept.getInputValue().toString()); return null; } } [/java] 9 Download the source from here ..