import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; 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.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.model.SelectItem; import oracle.adf.controller.ControllerContext; import oracle.adf.controller.TaskFlowId; 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.component.rich.data.RichTable; import oracle.adf.view.rich.component.rich.input.RichInputText; import oracle.adf.view.rich.component.rich.layout.RichPanelTabbed; import oracle.adf.view.rich.component.rich.layout.RichShowDetailItem; 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.jbo.ApplicationModule; import oracle.jbo.Key; import oracle.jbo.Row; import oracle.jbo.uicli.binding.JUCtrlValueBinding; import org.apache.myfaces.trinidad.render.ExtendedRenderKitService; import org.apache.myfaces.trinidad.util.Service; /** * A series of convenience functions for dealing with ADF Bindings. * Note: Updated for JDeveloper 11 * * @author Duncan Mills * @author Steve Muench * @author Ric Smith * * $Id: ADFUtils.java 2513 2007-09-20 20:39:13Z ralsmith $. */ public class ADFUtils { public static final ADFLogger LOGGER = ADFLogger.createADFLogger(ADFUtils.class); /** * 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 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 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); } /** * Return the current page's binding container. * @return the current page's binding container */ public static BindingContainer getBindingContainer() { // return (BindingContainer)JSFUtils.resolveExpression("#{bindings}"); FacesContext fc = FacesContext.getCurrentInstance(); BindingContainer bindings = (BindingContainer)fc.getApplication().evaluateExpressionGet(fc, "#{bindings}", BindingContainer.class); return 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. * * 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 displayAttrNames array of attribute names from iterator rows to display * @return ADF Faces SelectItem for an iterator binding */ public static List<SelectItem> selectItemsForIterator(String iteratorName, String valueAttrName, String[] displayAttrNames) { return selectItemsForIterator(findIterator(iteratorName), valueAttrName, displayAttrNames); } /** * Get a List of attributes as a Map (of name, value) for an iterator. * @param iter iterator binding * @param attrNames array of attribute names for attributes to be retrieved * @return List of attribute values */ public static List<Map<String, Object>> attributesListForIterator(DCIteratorBinding iter, String[] attrNames) { List<Map<String, Object>> attributeList = new ArrayList<Map<String, Object>>(); for (Row r : iter.getAllRowsInRange()) { Map<String, Object> alist = new HashMap<String, Object>(); for (String aName : attrNames) { alist.put(aName, r.getAttribute(aName)); } attributeList.add(alist); } return attributeList; } /** * Get a List of attributes as a Map (of name, value) for an iterator. * @param iteratorName ADF iterator binding name * @param attrNames array of attribute names for attributes to be retrieved * @return List of attribute values for an iterator */ public static List<Map<String, Object>> attributeListForIterator(String iteratorName, String[] attrNames) { return attributesListForIterator(findIterator(iteratorName), attrNames); } /** * 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 name iterator binding name * @return iterator binding */ public static DCIteratorBinding findIterator(String name) { DCIteratorBinding iter = getDCBindingContainer().findIteratorBinding(name); if (iter == null) { // throw new IteratorNotFound("Iterator '" + name + "' not found"); } return iter; } public static DCIteratorBinding findIterator(String bindingContainer, String iterator) { DCBindingContainer bindings = (DCBindingContainer)JSFUtils.resolveExpression("#{" + bindingContainer + "}"); if (bindings == null) { throw new RuntimeException("Binding container '" + bindingContainer + "' not found"); } DCIteratorBinding iter = bindings.findIteratorBinding(iterator); if (iter == null) { throw new RuntimeException("Iterator '" + iterator + "' not found"); } return iter; } public static JUCtrlValueBinding findCtrlBinding(String name) { JUCtrlValueBinding rowBinding = (JUCtrlValueBinding)getDCBindingContainer().findCtrlBinding(name); if (rowBinding == null) { throw new RuntimeException("CtrlBinding " + name + "' not found"); } return rowBinding; } /** * Find an operation binding in the current binding container by name. * * @param name operation binding name * @return operation binding */ public static OperationBinding findOperation(String name) { OperationBinding op = getDCBindingContainer().getOperationBinding(name); if (op == null) { throw new RuntimeException("Operation '" + name + "' not found"); } return op; } /** * Find an operation binding in the current binding container by name. * * @param bindingContianer binding container name * @param opName operation binding name * @return operation binding */ public static OperationBinding findOperation(String bindingContianer, String opName) { DCBindingContainer bindings = (DCBindingContainer)JSFUtils.resolveExpression("#{" + bindingContianer + "}"); if (bindings == null) { throw new RuntimeException("Binding container '" + bindingContianer + "' not found"); } OperationBinding op = bindings.getOperationBinding(opName); if (op == null) { throw new RuntimeException("Operation '" + opName + "' 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 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 displayAttrNames array of attribute names from iterator rows to display * @return ADF Faces SelectItem for an iterator binding */ public static List<SelectItem> selectItemsForIterator(DCIteratorBinding iter, String valueAttrName, String[] displayAttrNames) { List<SelectItem> selectItems = new ArrayList<SelectItem>(); for (Row r : iter.getAllRowsInRange()) { StringBuilder buf = new StringBuilder(); for (int idx = 0; idx < displayAttrNames.length; idx++) { buf.append((String)r.getAttribute(displayAttrNames[idx])); if (idx < (displayAttrNames.length - 1)) { buf.append("-"); } } selectItems.add(new SelectItem(r.getAttribute(valueAttrName), buf.toString())); } 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 iter 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 iter, String displayAttrName, String descriptionAttrName) { List<SelectItem> selectItems = new ArrayList<SelectItem>(); for (Row r : iter.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 iter 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 iter, String displayAttrName) { List<SelectItem> selectItems = new ArrayList<SelectItem>(); for (Row r : iter.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 opList) { if (opList != null && !opList.isEmpty()) { for (Object error : opList) { LOGGER.severe(error.toString()); } } } /** * Get the page flow scope * @return */ public static Map getPageFlowScope() { return AdfFacesContext.getCurrentInstance().getPageFlowScope(); } /** * Open a new browser tab/window starting a new bounded task flow. * * @param taskFlowId - id of bounded task flow to show in new window * @param taskFlowParams - params for the task flow (if any) * @param windowName - name of browser tab/window (window.name) * @param openInWindow - true will open a browser window (if settings of the browser * allow this), false will open a new browser tab. */ public static void launchTaskFlowInNewWindow(TaskFlowId taskFlowId, Map taskFlowParams, String windowName, boolean openInWindow) { launchTaskFlowInNewWindow(taskFlowId, taskFlowParams, windowName, openInWindow, 1000, 750); } /** * Open a new browser tab/window starting a new bounded task flow. * * @param taskFlowId - id of bounded task flow to show in new window * @param taskFlowParams - params for the task flow (if any) * @param windowName - name of browser tab/window (window.name) * @param openInWindow - true will open a browser window (if settings of the browser * allow this), false will open a new browser tab. * @param width * @param height */ public static void launchTaskFlowInNewWindow(TaskFlowId taskFlowId, Map taskFlowParams, String windowName, boolean openInWindow, int width, int height) { String url = ControllerContext.getInstance().getTaskFlowURL(false, taskFlowId, taskFlowParams); if (url == null) { throw new Error("Unable to launch window for task flow id " + taskFlowId); } FacesContext context = FacesContext.getCurrentInstance(); ExtendedRenderKitService extendedRenderKitService = Service.getService(context.getRenderKit(), ExtendedRenderKitService.class); // Build javascript to open a new browser tab/window StringBuilder script = new StringBuilder(); // Unable to get a named firefox tab to gain focus. To workaround // issue we close the tab first, then open it. if (!openInWindow && windowName != null) { script.append("var hWinx = window.open(\""); script.append("about:blank"); // the URL script.append("\",\""); script.append(windowName); script.append("\""); script.append(");"); script.append("\n"); script.append("hWinx.close();\n"); } // Set a variable with the window properties script.append("var winProps = \"status=yes,toolbar=no,copyhistory=no,width=" + width + ",height=" + height + "\";"); // If we aren't going to open in a new window, then clear the window properties if (!openInWindow) { script.append("winProps = '';"); } // Set isOpenerValid to true if window.opener (a parent window) is defined and open script.append("var isOpenerValid = (typeof(window.opener) != 'undefined' && window.opener != undefined && !window.opener.closed);"); // Set useProps to true if openInWindow is true or isOpenerValid is true script.append("var useProps = (" + openInWindow + " || isOpenerValid);"); // Set win to the current window, unless we need to use the parent, then set to window.opener (the parent window) script.append("var win = window; if (typeof(isChildWindow) != 'undefined' && isChildWindow != undefined && isChildWindow == true && isOpenerValid) {win = window.opener;}"); // Set hWin to the window returned by calling open on win script.append("var hWin = win.open(\""); script.append(url); // the URL script.append("\",\""); script.append(windowName); script.append("\""); script.append(", winProps"); script.append(");"); // Set focus to the window opened. script.append("hWin.focus();"); extendedRenderKitService.addScript(context, script.toString()); } public static void executeClientSideScript(String script) { FacesContext context = FacesContext.getCurrentInstance(); ExtendedRenderKitService extendedRenderKitService = Service.getService(context.getRenderKit(), ExtendedRenderKitService.class); extendedRenderKitService.addScript(context, script); } /** * Get the id of the RichShowDetailItem which is currently disclosed within the * RichPanelTabbed or null if no children disclosed. * * @param panelTabbed * @return */ public static String getDisclosedDetailItemId(RichPanelTabbed panelTabbed) { RichShowDetailItem item = getDisclosedDetailItem(panelTabbed); if (item != null) { return item.getId(); } return null; } /** * Get the RichShowDetailItem which is currently disclosed within the * RichPanelTabbed or null if no children disclosed. * * @param panelTabbed * @return */ public static RichShowDetailItem getDisclosedDetailItem(RichPanelTabbed panelTabbed) { if (panelTabbed != null) { Iterator iter = panelTabbed.getChildren().iterator(); // Loop through all the child components while (iter.hasNext()) { UIComponent component = (UIComponent)iter.next(); // Make sure we only check components that are detailItems if (component instanceof RichShowDetailItem) { RichShowDetailItem detailItem = (RichShowDetailItem)component; if (detailItem.isDisclosed()) { return detailItem; } } } } return null; } /** * Helper method to check if a UI component value * is null or empty. * @param component UIComponent * @return true / false */ public static boolean isEmpty(UIComponent component) { boolean isEmpty = false; if (component == null) { isEmpty = true; } else { // for a text field, check the value as a String if (component instanceof RichInputText) { RichInputText textField = (RichInputText)component; if (textField.getValue() == null || ((String)textField.getValue()).length() <= 0) { isEmpty = true; } } } return isEmpty; } /** * Get the list containging the selected rows for the given table <br/> * Make sure the ADF table definition does not have the selection listener * and the make current set. * @param table * @return */ public static List<Row> getSelectedRows(RichTable table) { List<Row> rows = new ArrayList<Row>(); // get the selected row keys (iterator) Iterator keyIter = table.getSelectedRowKeys().iterator(); // remember selected row keys Object oldKey = table.getRowKey(); // loop for each selection while (keyIter.hasNext()) { } // restore originally selected rows table.setRowKey(oldKey); return rows; } public static void printRow(Row row) { System.out.println("\nSTART " + row.getKey() + " *********************"); for (int i = 0; i < row.getAttributeCount(); i++) { System.out.println("row[" + row.getAttributeNames()[i] + "]:[" + row.getAttribute(i) + "]"); } System.out.println("END " + row.getKey() + "*********************\n"); } /** * Get a List of attributes as a Map (of name, value) for an iterator. * @param iter iterator binding * @param keyAttrName attribut name for the key of the map * @param valueAttrName attribut name for the value * @return Map of attribute values */ public static Map<Object, Object> attributesMapForIterator(DCIteratorBinding iter, String keyAttrName, String valueAttrName) { Map<Object, Object> amap = new HashMap<Object, Object>(); for (Row r : iter.getAllRowsInRange()) { amap.put(r.getAttribute(keyAttrName), r.getAttribute(valueAttrName)); } return amap; } /** * Get a List of attributes as a Map (of name, value) for an iterator. * @param iteratorName ADF iterator binding name * @param keyAttrName attribut name for the key of the map * @param valueAttrName attribut name for the value * @return Map of attribute values */ public static Map<Object, Object> attributeMapForIterator(String iteratorName, String keyAttrName, String valueAttrName) { return attributesMapForIterator(findIterator(iteratorName), keyAttrName, valueAttrName); } 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); } public static Object invokeMethodExpression(String expr, Class returnType, Class argType, Object argument) { return invokeMethodExpression(expr, returnType, new Class[] { argType }, new Object[] { argument }); } /** * 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); } }
Showing posts with label ADFUtils. Show all posts
Showing posts with label ADFUtils. Show all posts
Sunday 18 May 2014
ADFUtils
Subscribe to:
Posts (Atom)
A Guide to Installing Oracle HR Schema on an Existing Docker Container
Hi Reader, Today I want to share my learning on how to install Oracle HR schema on a existing docker container. Step 1: Download the verif...
-
Hello Fellas, today i'm sharing my learning to how to delete all files and folders in windows. rd /s/q FolderName thank you :)
-
Hello Fellas, Today I'm sharing my source code to find H.C.F. using Java. MyException.java TwoDigit.java Thank You :)
-
see who is the current user. whoami enter the command to change the password. passwd user_name enter the old password. enter the new p...