Please disable your adblock and script blockers to view this page

Search this blog

Monday 13 January 2014

Cool Feature- Using 'Placeholder' to set watermark hint on empty input fields in ADF/Jdeveloper 12C

Hello All,
This post talks about a very cool feature , introduced in ADF/Jdeveloper 12C.
Sometimes we need to set some hint on input fields as you can see in facebook sign up form, all fields are self descriptive


So now we can do that in ADF faces easily , in 12C there is a property named 'Placeholder' to define hint for empty fields
You can see in below form (ADF Faces)-


See the xml source of this simple form-




 <af:panelFormLayout id="pfl1">
                    <f:facet name="footer"/>
                    <af:inputText label="Country" id="it1" placeholder="Enter Country Name"
                                  contentStyle="width:200px;color:red;"/>
                    <af:inputDate label="Date" id="id1" placeholder="Select Date"
                                  contentStyle="width:200px;color:red;"/>
                    <af:inputListOfValues label="Country" popupTitle="Search and Result Dialog" id="ilov1"
                                          placeholder="Select Country" contentStyle="width:200px;color:red;"/>
                    <af:inputComboboxListOfValues label="Country" popupTitle="Search and Result Dialog" id="iclov1"
                                                  placeholder="Select Country" contentStyle="width:200px;color:red;"/>
                    <af:inputNumberSpinbox label="Value" id="ins1" placeholder="Enter Or Select"
                                           contentStyle="width:200px;color:red;"/>
                </af:panelFormLayout>

Cheers :-)

Friday 10 January 2014

Oracle ADF Tutorial- How to learn Oracle ADF from scratch ?


Hello All

If you are new to ADF and want to learn this framework then you must be aware of good sources of Oracle ADF tutorials




You must refer a good book to clear your basics as Oracle ADF Real World Developer’s Guide


and start with Oracle ADF Insider videos after that refer Oracle JDeveloper 12c (12.1.3) Tutorials
After this start referring Oracle ADF Blogs for advance development and check all the sample applications provided there, Here you can find some of the best blogs
In case of any problem any issue related to ADF, Ask in OTN forum
Use social media to get new updates about product and blogs




Cheers :-) Happy Learning

Friday 3 January 2014

Identifying Modified/newely added row in af:table, get all modified rows of viewobject in bean

Hello All,
first of all, a very Happy new year to everyone, learn more and more ADF


this tutorial is about a requirement of showing modified rows on page
Suppose if there is lot of data in af:table and user is modifying some rows then it must reflected immediately on page that which rows are modified for more clarity

Andrejus has also posted about it in 2010
http://andrejusb.blogspot.in/2010/04/changed-row-highlighting-in-oracle-adf.html

But this post talks about two requirements-
  1. Want to highlight modified rows only on page
  2. Want to get modified rows in managed bean
First One could be achieved without writing a single line of code only using expression, a row in table or view object has four state-



  • New
  • Modified
  • Un-Modified
  • Initialized


/* this expression returns state of current row in collection such as table or treeTable*/
#{row.row.entities[0].entityState} 

/*here row is reference variable of collection, this expression returns an int value if it is 
 2-Modified
 0-New
 1-Unmodified
-1-Initialized
*/

  • I'm using Departments table of HR Schema to implement this sample app
  • after business components configuration ,Drop departments VO from data control on page as af:table
  • Now to check row status , i have written following expression in inline style of af:column of af:table, so that it can check state of all rows of table 

  • #{row.row.entities[0].entityState==2 ? 'background-color:orange' : row.row.entities[0].entityState==0 ? 'background-color:darkgreen' : ''} 
    

  • Now Run your page and change any value of table
       After Updating Values in Row- see modified rows are highlighted
  •  Now you are done with first requirement , if we talk about second one, in case you want to get all modified rows in managed bean to perform some operation
  • To achieve this i have used a transient attribute in Departments view Object to store state of each row
  • Now in RowImpl of departments viewobject i have to write some code to get current state of Row, see the getter method of transient attribute in RowImpl

  •     /**
         * Gets the attribute value for the calculated attribute CheckRowStatus.
         * @return the CheckRowStatus
         */
        public Integer getCheckRowStatus() {
            byte entityState = this.getEntity(0).getEntityState();
            return new Integer(entityState);
    
            // return (Integer) getAttributeInternal(CHECKROWSTATUS);
        }
    

  • Now i have placed a button on page to get all modified rows and show a message on page through managed bean
  • See the method written in ApplicationModuleImpl class and then exposed to client to be used in managed bean action event

  •     /**Method to get all modified rows and store corresponding Department Name in an ArrayList
         * @return
         */
        public ArrayList<String> getModifiedRows() {
            ArrayList<String> deptNm = new ArrayList<String>();
            ViewObject deptVo = this.getDepartmentsView1();
            RowSetIterator deptIter = deptVo.createRowSetIterator(null);
            while (deptIter.hasNext()) {
                Row nextRow = deptIter.next();
                if (nextRow.getAttribute("CheckRowStatus") != null) {
                    Integer rowStatus = (Integer)nextRow.getAttribute("CheckRowStatus");
                    if (rowStatus == 2) {
                        deptNm.add(nextRow.getAttribute("DepartmentName").toString());
                    }
                }
            }
            return deptNm;
    
        }
    

  • Now call this method in managed bean through Binding Layer

  •     /**Method to get BindingContainer of current page
         * @return
         */
        public BindingContainer getBindings() {
            return BindingContext.getCurrent().getCurrentBindingsEntry();
        }
    
        /**Method to call AM method and to show modified rows on page in FacesMessage
         * @param actionEvent
         */
        public void getModifiedRows(ActionEvent actionEvent) {
            OperationBinding ob = getBindings().getOperationBinding("getModifiedRows");
            ob.execute();
            if (ob.getResult() != null) {
                ArrayList<String> deptName = (ArrayList<String>)ob.getResult();
                StringBuilder saveMsg =
                    new StringBuilder("<html><body><b><p style='color:red'>Modified Rows in Departments table are-</p></b>");
    
                saveMsg.append("<ul>");
                for (String name : deptName) {
                    System.out.println(name);
                    saveMsg.append("<li> <b>" + name + "</b></li>");
                }
    
                saveMsg.append("</ul><br>");
                saveMsg.append("</body></html>");
                FacesMessage msg = new FacesMessage(saveMsg.toString());
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        }
    

  • Now again run this page and change some departments then click on get modified rows, it will show currently modified rows

Cheers- Download Sample App