Skip to main content

Posts

Showing posts with the label adf

Bean Based ADF Table with List View in detailStamp facet

One of our projects, we had to display a "tree type" table with different datamodel for children. To solve this, I choose a normal af:table with a detailStamp facet with a List view inside it. But pretty soon, I ran into an issue of correctly identifying the "disclosed" rows. Since my table's datasource is a bean, not ADF managed datacontrol. So I solved it using a discloseListener on the af:table. Full Application is on GitHub : https://github.com/sohamda/Row-Disclose-Example/ Classes invloved : 1. POJO.java : dataProvider class for af:table 2. SubPOJO.java : dataProvider for the list view inside detailStamp of the table. 3. TableBean.java : provides the methods for populating af:table and af:listView. Also has a discloseListener method to correctly populate the listView datasource. af:table definition : TableBean.tableRowDiscloseListener() :     public void tableRowDiscloseListener(RowDisclosureEvent rowDisclosureEvent) {     ...

Calling Synchronous WebServices Asynchronously from ADF Managed Bean

Recently I had to implement a SOAP webservice call from a af:commandButton action, but the requirement was to make it an asynchronous call. So that the user doesn't have to wait till the Webservice finish processing the request. So I built : Interface which extends java.util.concurrent.Callable. Interface so that I can use the same technique to call multiple Webservices, if required. A session scoped bean to invoke the above interface. #1. Interface : WebserviceCallee public interface WebserviceCallee<T> extends Callable<Boolean> {          // Base URL of the Webservice to call     public String getBaseUrl();     public void setBaseUrl(String baseUrl);     // To identify this object uniquely         public String getUniqueIdentifier(); } #2. Implentation :   public class WebServiceA implements WebserviceCallee<Boolean> {     ...

ADF Utility : Retrieve ApplicationModule object from Managed Bean

Many a times it is required to retrieve the ApplicationModule object from ADF managed beans, for example, to programmatically query a view object.  Invoke the below class like : AppModuleBean.getService(FacesContext.getCurrentInstance(), APP_MODULE_NAME)) This gives 3 different ways to retrieve the AppModule. Using BindingContext. Evaluating DataControl EL expression. Evaluating Bindings EL expression.     public class AppModuleBean {     public static ApplicationModule getService(FacesContext fc, String name) {                 DCDataControl dc = fromBindingContext(name);                 if(dc == null) {                        dc = fromEvaluatingDataControlEL(fc, name);     ...

ADF Utility : Find UIComponent from Managed Bean

Many a times, it is required to find an UIComponent from ADF managed bean, to do something with it, for example : change the value of an af:outputText, change readOnly property of an af:inputText etc.     private UIComponent getUIComponent(String id) {                  FacesContext facesCtx = FacesContext.getCurrentInstance();          return findComponent(facesCtx.getViewRoot(), id);     }          private UIComponent findComponent(UIComponent base, String id) {                 if (id.equals(base.getId())) {             return base;         }         UIComponent children = null;       ...

ADF Utility : Evaluating EL expressions

To evaluate an EL expression from ADF managed classes, such as managed beans.   public Object getExpressionValue(String jsfExpression)   {     // when specifying EL expression in managed bean as "literal" value     // so t can be evaluated later, the # is replaced with $, quite strange     if (jsfExpression == null)     {       return jsfExpression;     }     if (jsfExpression.startsWith("${"))     {       jsfExpression = "#{" + jsfExpression.substring(2);     }     if (!jsfExpression.startsWith("#{"))     {       if (jsfExpression.equalsIgnoreCase("true"))       {         return Boolean.TRUE;       }       else if (jsfExpression.equalsIgnoreCas...

Exception Handling in ADF

This blog will give you an overview on how you can successfully deal with unhandled Runtime exceptions in an ADF application. This will give you an idea of: How to catch the unhandled exceptions. Write a separate log file with stacktrace and thread dumps. Redirect the user to an static error page #1. Catch unhandled exceptions :  Create a class "MyExceptionHandler" which extends : oracle.adf.view.rich.context.ExceptionHandler. Override handleException() method.     public void handleException(FacesContext facesContext, Throwable throwable, PhaseId phaseId) throws Throwable {         // this method is going to create a separate file with stacktrace and thread dumps         writeException(throwable);         // redirect to error page         redirectToErrorPage(facesContext);     }  Create a fo...