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

basically pass variable from page1 to page2

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

we can now retrieve back the value in another page

The Input will be

t will be as shown below.

 

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

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

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] Download the source from here ..