SlideShare a Scribd company logo
Exadel




Hands-on with RichFaces

JavaOne 2010
September 20th, 2010

Max Katz
Exadel
Exadel




Who is this guy?
● Senior Systems     Engineer, RIA strategist at
 Exadel
   ◦ http://mkblog.exadel.com
   ◦ http://twitter.com/maxkatz
● JSF/RichFaces consulting, training
● Leads   a number of projects:
  ◦   Exadel Tiggr
  ◦   Exadel Flamingo
  ◦   Exadel Fiji
  ◦   Exadel JavaFX Plug-in for Eclipse
Exadel




    Author of         Co-author of RichFaces
Practical RichFaces       DZone Refcard
     (Apress)
Exadel




Exadel
● Products        and services company
● Founded in 1998, headquarters in
  Concord, CA
● 350+        employees
           City         Country        Year
 Concord             California, USA   1998
 Moscow                  Russia        1999
 Minsk                  Belarus        2002
 Vitebsk                Belarus        2005
 Donetsk, Kharkov       Ukraine        2006
Exadel




Products
● Open    Source with JBoss
  ◦ RichFaces
  ◦ JBoss Tools/JBoss Developer Studio
● Tiggr   – create and share mockups online
● Flamingo
● Fiji   (JSF – JavaFX/Flex integration)
● jsf4birt   (JSF – BIRT/Actuate integration)
● JavaFX     Plug-in for Eclipse
Exadel




Services
● Rich enterprise application
 development
● Eclipse development
● Custom rich   component development
● Mobile   development
● Training
● Most projects   are done in Eastern
 Europe
Exadel




The Plan
● Ajax features in   JSF 2
● The   new RichFaces 4
Exadel




JSF 2
● JSF   2 is a major upgrade over JSF 1.x
● Many features, ideas taken from
 projects such as Seam and RichFaces,
 and others
Exadel




JSF 2 new features
● Facelets             ● New    scopes
● Composite              ◦ Flash, View,
 components                custom
● Navigation           ● Configuration

● GET   support          ◦ Annotations
                       ● BeanValidation
  ◦ Page parameters
                        support
  ◦ h:link, h:button
                       ● Ajax
● Resource   loading
Exadel




JSF 2 <f:ajax>
● Basic Ajax   functionality
● Greatyinspired by RichFaces 3
 <a4j:support> tag
● Ajax in   JSF in 3 easy steps:
  ◦ How to send an Ajax request
  ◦ Partial view processing
  ◦ Partial view rendering
Exadel



2. What to execute on the
server:
● @all                                 1. <f:ajax> and event takes
● @this (default)                      care of firing the Ajax
● @form                                request
● @none

● Id's

● EL




            <h:commandButton>
              <f:ajax event="click"
                    execute="@form"
                    render="@form id1 id2"/>
            <h:commandButton>
                                       3. Partial view rendering:
                                       ● @all

                                       ● @this

                                       ● @form

                                       ● @none (default)

                                       ● Id's

                                       ● EL
Exadel




        Using <f:ajax>
<h:commandButton value="Submit" action="#{bean.action}" >
   <f:ajax event="focus" execute="@form" render="output"/>
</h:commandButton>
<h:panelGrid id="output">
 ...                                             Attaching to button,
                                                 specifying event
</h:panelGrid>


<h:commandButton value="Submit" action="#{bean.action}" >
   <f:ajax execute="@form" render="output output2"/>
</h:commandButton>
<h:panelGrid id="output">
 ...
</h:panelGrid>
<h:panelGrid id="output2">
 ...                                       No event specified,
</h:panelGrid>                             using default event
Exadel




       Using <f:ajax>
                                                  Default event is onchange

<h:inputText value="#{bean.text}" >
   <f:ajax event="keyup" render="text"/>
</h:inputText>
<h:outputText id="text" value="#{bean.text}" />

                                         No event specified so using default

<h:selectOneListbox id="list" value="#{bean.choice}" >
   <f:selectItems value="#{cean.choiceList}" />
   <f:ajax render="info" listener="#{bean.change}"/>
</h:selectOneListbox>

<h:panelGrid id="info">
 ...
</h:panelGrid>
Exadel

<f:ajax>
  <h:panelGrid>               No default event, no Ajax added
    <h:selectBooleanCheckbox>                                       onchange
    <h:inputText>                                      onchange
    <h:commandButton>                                       onclick
  </h:panelGrid>
</f:ajax>

<f:ajax event="click">
  <h:panelGrid>                                       onclick
    <h:selectBooleanCheckbox>                                             onclick
    <h:inputText>                                          onclick
    <h:commandButton>                             onclick and onfocus
     <f:ajax event="focus"/>
    </h:commanButton>
  </h:panelGrid>
</f:ajax>

<f:ajax event="valueChange">
  <h:panelGrid>                                 No Ajax added
    <h:selectBooleanCheckbox>                                           onchange
    <h:inputText>                                     onchange
    <h:commandButton>                                        onfocus
     <f:ajax event="focus"/>
    </h:commanButton>
  </h:panelGrid>
</f:ajax>
Exadel




   That's good, but a rich
component framework is still
  need to build real-world
     Ajax applications.
Exadel



RichFaces 4 – rich JSF
framework
● JSF   2 based
● Ajax components

  ◦ a4j:* tag library (core)
  ◦ rich:* tag library (UI)
● Skins and themes
● CDK –   Component Development Kit
Exadel




 RichFaces versions


       Version             JSF 1.1       JSF 1.2   JSF 2

RichFaces 3.1.x               •
RichFaces 3.3.3*                            •       •
RichFaces 4                                         •
* Note: RichFaces 3.3.3 has basic JSF 2 support
Exadel




What about deployment?

       Any server

 All browsers (even IE 6)
Exadel




RichFaces history
2005: started by Alexander Smirnov
2005-2007: Developed by Exadel
           Ajax4jsf – open source, free
           RichFaces - commercial
2007: JBoss takes over
      Exadel team continues to develop
      the framework
Exadel




Just tell me when RichFaces 4
   is going to be released?
Exadel




RichFaces 4


 JavaScript in RichFaces is
 now entirely based on the
  popular jQuery library.
Exadel




RichFaces 4
● All components are reviewed for
 consistency, usability
● Redesigned following    semantic
 HTML principles
● Server-side
           and client-side
 performance optimization
● Strict   code clean-up and review
Exadel




RichFaces 4
● Newand easy to use CDK
 (Component Development Kit)
● Quickly build your   own custom rich
 components
Exadel




Google App Engine
● DeployRichFaces application in
 Google App Engine (GAE)
● Special maven-based   plug-in
 available
Exadel




RichFaces <a4j:ajax>
● 100% based on     standard <f:ajax>
● Just replacef: with a4j: and get
 exactly the same functionality
● But,   you get extra features...
Exadel



  <a4j:ajax> attributes
         Attribute                 Description

onbegin              JavaScript to execute before Ajax request
                     JavaScript to execute after response
onbeforedomupdate
                     comes back but before DOM update
oncomplete           JavaScript to execute after DOM update
                     Skips Update Model and Invoke
bypassUpdates        Application phases, useful for form
                     validation
                     Skips all a4j:outputPanel
limitRender          ajaxRender=”true” areas. Only renders
                     what is set in current render
status               Status to display during Ajax request

                     Sets focus on component after Ajax
focus
                     request
Exadel




RichFaces 4
That's not all, there are more RichFaces
                 goodies...
Exadel



RichFaces 4 core action –
fire an Ajax request
● a4j:ajax
● a4j:commandButton
● a4j:commandLink
● a4j:jsFunction
● a4j:poll
● a4j:push
Exadel



      <a4j:commandButton> –
      Ajax button
/* standard button with f:ajax */
<h:commandButton value="Save" action="#{bean.action}">
   <f:ajax execute="@form"
           render="output"/>
</h:commandButton>



/* RichFaces button */
<a4j:commandButton value="Save"
     execute="@form"
     render="output"
     action="#{bean.action}" />
Exadel


      <a4j:jsFunction> – fire Ajax
      request from any JavaScript
      function
<table>
   ...
   <td onmouseover="update('yellow')"/>
   ...
</table>
<a4j:jsFunction name="update"
                action="#{bean.change}"
                reRender="panel">
  <a4j:param value="param1" assignTo="#{bean.color}"/>
</a4j:jsFunction>
Exadel



      <a4j:poll> – periodically
      send an Ajax request

<a4j:poll interval="1000"
          action="#{bean.count}"
          render="output"
          enabled="#{bean.pollEnabled}" />

<h:panelGrid id="output">
...
</h:panelGrid>
Exadel



RichFace 4 core – output,
panels
● a4j:outputPanel
● a4j:status
● a4j:region
● a4j:queue
● a4j:repeat
● a4j:log
Exadel



      <a4j:outputPanel> – auto
      rendered panel

<h:selectOneMenu value="#{bean.fruit}">
   <a4j:ajax listener="#{bean.change}"/>
</<h:selectOneMenu>
<a4j:outputPanel ajaxRendered="true">
   <h:panelGrid>
      ...
   </h:panelGrid>                        Rendered on every
   <h:panelGrid>                         Ajax request
      ...
   </h:panelGrid>
</a4j:outputPanel>
Exadel



      <a4j:status> – Ajax request
      status

<a4j:status name="ajaxSpecial">
  <f:facet name="start">
    <h:graphicImage value="ajaxStatus.jpg"/>
  </f:facet>
</a4j:status>

<h:form>
   <inputText />
   <inputText />
   <a4j:commandButton status="ajaxSpecial"/>
</h:form>
Exadel



<a4j:region> – declaratively
define execute region
<h:form>                                    Execute options:
                                            @all●

  <a4j:region>                              @this (default)
                                                ●

     <h:inputText />                        @form
                                                ●


     <h:inputText />                        @none
                                                ●

                                            Id's●

     <a4j:commandButton execute="@region"/> EL  ●

  <a4j:region>                              @region
                                                ●


</h:form>

<h:form>
  <a4j:region>
     <h:inputText />
     <h:inputText />
     <a4j:commandButton />
  <a4j:region>
</h:form>
Exadel



<a4j:log> – Ajax request
information
● Levels:

  ◦ debug, info, warn, error
Exadel




      JavaScript interactions
<h:commandLink value="Link"
   <f:ajax onevent="ajaxFunction();">
</h:commandLink>
                                Called three times:
                                1) begin
                                2) success
                                3) complete



<a4j:commandLink value="Link"
   onbegin="alert('Link clicked')"
   onbeforedomupdate="alert('Response received')"
   oncomplete="alert('DOM updated')">
</a4j:commandLink>

                                Events are separated
Exadel




      Advanced rendering options

<a4j:commandButton render="output"/>
<a4j:commandButton render="output" limitRender="true"/>

<h:panelGrid id="output">
                               Turns off all auto rendered panels,
...
                               only renders what is set in current
</h:panelGrid>                 render

<a4j:outputPanel ajaxRendered="true">
...
</a4j:outputPanel>
Exadel


Skipping
phases
when
validating
1.Restore View
2.Apply Request Values
3.Process Validation
4.Update Model
5.Invoke Application
6.Render Response


 <h:inputText id="name" value="#{bean.name}"/>
    <a4j:ajax event="blur" bypassUpdates="true"/>
 </h:inputText>
 <rich:message for="name"/>
Exadel




JSF 2 queue
● JSF2 has very basic queue
 functionality
● Events   are queued and fired one at a
 time
● Only one request is processed on the
 server at a time
Exadel




RichFaces queue upgrades
● Delay firing   of a request
● Combine requests      from one or more controls
● Cancel DOM       updates if the same request was
 fired
● Define   queue as:
  ◦   Global (all views have queue)
  ◦   View-based
  ◦   Form-based
  ◦   Named (used by particular components only)
Exadel




      RichFaces <a4j:queue>
<a4j:queue requestDelay="2000"/>
...                                    Delay request
                                       by 2 seconds
<a4j:commandButton value="Button1"/>
<a4j:commandButton value="Button2"/>




<a4j:queue requestDelay="2000"/>
...                                           Overwrite default
<a4j:commandButton>                           delay request
                                              by 1 second
   <a4j:attachQueue requestDelay="1000"/>
</a4j:commmandButton>
<a4j:commandButton />
Exadel



      a4j:queue – “combining”
      events

<a4j:queue requestDelay="2000"/>
...
<a4j:commandButton>
   <a4j:attachQueue requestGroupingId="mainGroup"/>
</a4j:commmandButton>
<a4j:commandButton>
   <a4j:attachQueue requestGroupingId="mainGroup"/>
</a4j:commmandButton>
Exadel



      a4j:queue – ignoring “stale”
      responses
<a4j:queue requestDelay="2000
           ingoreDupResponses="true"/>

<h:inputText value="#{bean.state}">
   <a4j:ajax event="keyup"
             listener="#{bean.load}"
             render="states"/>
</h:inputText>

<rich:dataTable id="states">
  <rich:column/>
</rich:dataTable>
Exadel




RichFaces UI components
● Data iteration
● Output,   panels
● Input
● Menu
● Trees
● Selects
● Layout
● Client side   validation
● Miscellaneous
Exadel




       Rich data iteration
● a4j:repeat                       ● rich:dataScroller
● rich:dataTable                   ● rich:column
● rich:extendedDataTable           ● Columnand row
● rich:subTable                     spanning
                                   ● Filtering,   sorting
  ◦   rich:subTableToggleControl
● rich:list
● rich:dataGrid
Exadel




             Partial update

                         render="@column"
                                                              render="@header"

render="@row"
                                                               render="@body"

                                                              render="@footer"



                                            render="cellId"
 To render from outside the table:
 render="tableId@header"
 render="tableId@body"
 render="tableId@footer"
Exadel




              Partial update
render="tableId:#{bean.rowsSet}"




render="tableId:#{bean.rowsSet}:cellId"
Exadel




Rich output, panels
● rich:panel              ● rich:message(s)
● rich:togglePanel        ● rich:paint2D
● rich:accordion          ● rich:separator
● rich:popupPanel
                          ● rich:toolBar
● rich:tabPanel
                          ● rich:toolTip
● rich:panelBar

● rich:panelMenu

● rich:collapsiblePanel
Exadel




Rich input
● rich:autocomplete
● rich:inputNumberSlider
● rich:inputNumberSpinner
● rich:inplaceInput
● rich:calendar
● rich:colorPicker
● rich:editor
● rich:fileUpload
Exadel




Rich menu
● rich:contextMenu
● rich:dropDownMenu
Exadel




Rich tree
● rich:tree
● rich:treeNode
● Listeners
Exadel




Rich selects
● rich:orderingList
● rich:pickList
● rich:listShuttle
● rich:selectBox
● rich:inplaceSelect
Exadel




Rich layout
● rich:page
● rich:layout

  ◦ rich:layoutPanel
● rich:splitter
Exadel




      Bean Validation (JSR 303)
       ● JSF 2 has support for Bean Validation
         (on the server)
public class Bean {
  @Email
  private String email;
}



<h:inputText id="email" value="#{bean.email}">
   <a4j:ajax event="blur"/>
</h:inputText>
<rich:message for="email"/>
Exadel




      RichFaces client validation

Public class Bean {
  @Email
  private String email;
}


<h:inputText id="email" value="#{bean.email}">
   <rich:clientValidator event="blur"/>
</h:inputText>
<rich:message for="email"/>
Exadel




         RichFaces client functions
         Function                        Description

rich:client(id)           returns component client id
rich:element(id)          returns DOM element
                          returns RichFaces client component
rich:component(id)
                          instance to call JS API method
rich:isUserInRole(role)   returns if the user has specified role
                          returns component instance for given
rich:findComponent(id)
                          short id
Exadel




      rich:component(id) function
       ● Allows   to call JS API on a component

<input type="button"
       onclick="#{rich:component('popup')}.show();"
       value="Open" />

<rich:popupPanel id="popup">
   <h:outputLink value="#"
        onclick="#{rich:component('popup')}.hide();
           return false;">
          <h:outputText value="Close"/>
    </h:outputLink>
</rich:popupPanel>
Exadel




Rich miscellaneous
● rich:componentControl
● rich:jQuery
● rich:hotKey
● rich:gmap
● rich:virtualEarth
Exadel




      <rich:componentControl>
       ● Allows  to call JS API on a component
         in declarative fashion
<h:outputLink id="openLink" value="#">
   <h:outputText value="Open" />
   <rich:componentControl event="click"
                          operation="show"
                          target="popup" />
</h:outputLink>

<rich:popupPanel id="popup">
...
</rich:popupPanel>
Exadel




      <rich:jQuery>
<input type="button" id="changeButton"
                      value="Change title" />
<rich:jQuery selector="#changeButton"
 query="click(function(){
   $('#panel #panel_header').text('Capital of Russia');
})"/>


<rich:panel header="Moscow" id="panel">
   Moscow is the capital, the most populous ...
</rich:panel>
Exadel




Skins
Exadel




Skins
● Lightweight   extension on top of CSS
● Change
       look and feel of all Rich
 component with a few minor changes
● Can
    be applied to standard JSF and
 HTML tags as well
Exadel




Ready-to-use skins
● classic
● emeraldTown
● blueSky
● ruby

● wine
● deepMarine
● plain
● japanCherry

● laguna        <context-param>
                  <param-name>org.richfaces.skin</param-name>
● glassX          <param-value>ruby</param-value>
                </context-param>
● darkX
Exadel




      Skin file (properties file)
#Colors
headerBackgroundColor=#900000
headerGradientColor=#DF5858
headerTextColor=#FFFFFF
headerWeightFont=bold

generalBackgroundColor=#f1f1f1
generalTextColor=#000000
generalSizeFont=11px
generalFamilyFont=Arial, Verdana, sans-serif

controlTextColor=#000000
controlBackgroundColor=#ffffff
additionalBackgroundColor=#F9E4E4
Exadel




Skins
● Modify   existing or create your own
  <context-param>
    <param-name>org.richfaces.skin</param-name>
    <param-value>myCustomSkin</param-value>
  </context-param>

● Change   skins in runtime
  <context-param>
    <param-name>org.richfaces.skin</param-name>
    <param-value>#{bean.skin}</param-value>
  </context-param>
Exadel




      Overwriting skins
<style>
 .rf-p-hr {
    // your custom style, applied to all panels on
    // on page
  }
 .panelHeader {
    // custom header style
  }
</style>

<rich:panel id="panel1">
...
</rich:panel id="panel2">
<rich:panel headerClass="panelHeader">
...
</rich:panel>
Exadel




Examples
Exadel




That's it for RichFaces, there
 is one more thing I want to
           show you.
Exadel


A peek at the future: Going
Beyond JavaServer Faces 2.0
with RichFaces 4

Tuesday, September 21
9:30am
Golden Gate 6/7

Jay Balunas, Red Hat
Alexander Smirnov, Exadel
Exadel




Exadel Tiggr
Exadel
Exadel




Exadel Tiggr
● Create, collaborate and share
 mockups online
● RichFaces    palette
● Upcoming features

  ◦ HTML generation
  ◦ More widgets and controls
● Give   it a try - http://tiggr.exadel.com
Exadel




http://tiggr.exadel.com
Exadel



How can we help with
RichFaces
● Webapplication development with
 RichFaces
● Custom component    development
● Training:
        Training      Days
  JSF 1.2, 2          1-2
  RichFaces 3, 4      1-2
  JSF and RichFaces   2-3
  RichFaces 3 to 4    1-2
Exadel




Thank you!
● max@exadel.com
● http://mkblog.exadel.com
● http://twitter.com/maxkatz
● http://exadel.org

More Related Content

PDF
Ajax Applications with JSF 2 and new RichFaces 4 - Herbstcampus
PDF
Ajax Applications with JSF 2 and New RichFaces 4 - CONFESS 2011
PDF
Ajax Applications with JSF2 and New RichFaces 4 at JAX 2011
PDF
From Back to Front: Rails To React Family
PDF
JavaFX – 10 things I love about you
PDF
Angular2 & ngrx/store: Game of States
PPTX
Vue js and Dyploma
PDF
The JavaFX Ecosystem
Ajax Applications with JSF 2 and new RichFaces 4 - Herbstcampus
Ajax Applications with JSF 2 and New RichFaces 4 - CONFESS 2011
Ajax Applications with JSF2 and New RichFaces 4 at JAX 2011
From Back to Front: Rails To React Family
JavaFX – 10 things I love about you
Angular2 & ngrx/store: Game of States
Vue js and Dyploma
The JavaFX Ecosystem

What's hot (20)

PDF
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
PDF
Tokyo React.js #3: Missing Pages: ReactJS/Flux/GraphQL/RelayJS
PDF
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
PDF
Seven Versions of One Web Application
PDF
Vuejs testing
PDF
Promises are so passé - Tim Perry - Codemotion Milan 2016
PDF
Building and deploying React applications
PDF
Test Driven Development with JavaFX
ODP
AngularJs Crash Course
PDF
JavaOne - The JavaFX Community and Ecosystem
PPTX
Zend server 6 using zf2, 2013 webinar
PPTX
Angular 2 어디까지 왔을까
PDF
The JavaFX Ecosystem
PDF
준비하세요 Angular js 2.0
PDF
DataFX - JavaOne 2013
PDF
Step By Step Guide For Buidling Simple Struts App
PDF
Workshop 14: AngularJS Parte III
PPTX
Checkout Customizations in Magento 2 - MageTitansMCR 2017
PDF
The Road to Native Web Components
PDF
JavaFX Pitfalls
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Tokyo React.js #3: Missing Pages: ReactJS/Flux/GraphQL/RelayJS
Angular를 활용한 웹 프론트단 개발과 2.0에서 달라진점
Seven Versions of One Web Application
Vuejs testing
Promises are so passé - Tim Perry - Codemotion Milan 2016
Building and deploying React applications
Test Driven Development with JavaFX
AngularJs Crash Course
JavaOne - The JavaFX Community and Ecosystem
Zend server 6 using zf2, 2013 webinar
Angular 2 어디까지 왔을까
The JavaFX Ecosystem
준비하세요 Angular js 2.0
DataFX - JavaOne 2013
Step By Step Guide For Buidling Simple Struts App
Workshop 14: AngularJS Parte III
Checkout Customizations in Magento 2 - MageTitansMCR 2017
The Road to Native Web Components
JavaFX Pitfalls
Ad

Viewers also liked (8)

PPT
Pr Krasnaya Roza#@ Optim Idea
PDF
Building Mobile Apps With jQuery For Any Device In The Cloud
PDF
Building RIA Applications with RichFaces
PPT
Presentation
PPT
Ajax Applications with RichFaces and JSF 2
PDF
RichFaces 4 webinar #1: Everything You Need To Know
PPT
Presentazione Acqua
PDF
Using cloud tools to build enterprise mobile apps with APIs fast
Pr Krasnaya Roza#@ Optim Idea
Building Mobile Apps With jQuery For Any Device In The Cloud
Building RIA Applications with RichFaces
Presentation
Ajax Applications with RichFaces and JSF 2
RichFaces 4 webinar #1: Everything You Need To Know
Presentazione Acqua
Using cloud tools to build enterprise mobile apps with APIs fast
Ad

Similar to Hands On With Rich Faces 4 - JavaOne 2010 (20)

PDF
Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS
PDF
Ajax Applications with JSF 2 and New RichFaces 4 - JAX/JSF Summit
PDF
RichFaces 4 Webinar - New and Advanced Features
PDF
RichFaces 4 webinar #2: RichFaces 3 toRichFaces 4
PDF
What You Need To Build Cool Enterprise Applications With JSF
PDF
RichFaces 4: Rich Ajax Components For Your JSF Applications
PDF
Introduction to RichFaces
PPTX
PDF
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
PDF
JavaServer Faces 2.0 - JavaOne India 2011
PDF
RichFaces: rich:* component library
PDF
Ajax, JSF, Facelets, Eclipse & Maven tutorials
PDF
Going Above JSF 2.0 with RichFaces and Seam
PDF
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
PPT
JSF 2 and beyond: Keeping progress coming
PPTX
JSF 2: Myth of panacea? Magic world of user interfaces
PDF
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
PDF
JSF 2.0 Preview
PPTX
Jsf presentation
PPT
Rich faces
Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS
Ajax Applications with JSF 2 and New RichFaces 4 - JAX/JSF Summit
RichFaces 4 Webinar - New and Advanced Features
RichFaces 4 webinar #2: RichFaces 3 toRichFaces 4
What You Need To Build Cool Enterprise Applications With JSF
RichFaces 4: Rich Ajax Components For Your JSF Applications
Introduction to RichFaces
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
JavaServer Faces 2.0 - JavaOne India 2011
RichFaces: rich:* component library
Ajax, JSF, Facelets, Eclipse & Maven tutorials
Going Above JSF 2.0 with RichFaces and Seam
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
JSF 2 and beyond: Keeping progress coming
JSF 2: Myth of panacea? Magic world of user interfaces
Hyperproductive JSF 2.0 @ JavaOne Brazil 2010
JSF 2.0 Preview
Jsf presentation
Rich faces

More from Max Katz (11)

PDF
Wolters Kluwer Tech. Conference: Disrupting Mobile Development
PDF
Tiggzi at DC jQuery Meetup
PDF
Learn How to Build Mobile Apps Using Cloud Services
PDF
Tiggr Mobile Apps Builder at Silicon Valley HTML5 Group Meetup
PDF
Tiggr - Web-based IDE for Mobile Web And Native Apps
PDF
Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011
PDF
Devoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
PDF
RichFaces skins
PDF
RichFaces: more concepts and features
PPT
Rich Enterprise Applications with JavaFX
PDF
Building RIA Applications with JavaFX
Wolters Kluwer Tech. Conference: Disrupting Mobile Development
Tiggzi at DC jQuery Meetup
Learn How to Build Mobile Apps Using Cloud Services
Tiggr Mobile Apps Builder at Silicon Valley HTML5 Group Meetup
Tiggr - Web-based IDE for Mobile Web And Native Apps
Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011
Devoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
RichFaces skins
RichFaces: more concepts and features
Rich Enterprise Applications with JavaFX
Building RIA Applications with JavaFX

Recently uploaded (20)

PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
KodekX | Application Modernization Development
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Big Data Technologies - Introduction.pptx
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Encapsulation theory and applications.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Encapsulation_ Review paper, used for researhc scholars
KodekX | Application Modernization Development
NewMind AI Weekly Chronicles - August'25 Week I
Big Data Technologies - Introduction.pptx
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
CIFDAQ's Market Insight: SEC Turns Pro Crypto
20250228 LYD VKU AI Blended-Learning.pptx
The AUB Centre for AI in Media Proposal.docx
Dropbox Q2 2025 Financial Results & Investor Presentation
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Encapsulation theory and applications.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
“AI and Expert System Decision Support & Business Intelligence Systems”
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

Hands On With Rich Faces 4 - JavaOne 2010

  • 1. Exadel Hands-on with RichFaces JavaOne 2010 September 20th, 2010 Max Katz Exadel
  • 2. Exadel Who is this guy? ● Senior Systems Engineer, RIA strategist at Exadel ◦ http://mkblog.exadel.com ◦ http://twitter.com/maxkatz ● JSF/RichFaces consulting, training ● Leads a number of projects: ◦ Exadel Tiggr ◦ Exadel Flamingo ◦ Exadel Fiji ◦ Exadel JavaFX Plug-in for Eclipse
  • 3. Exadel Author of Co-author of RichFaces Practical RichFaces DZone Refcard (Apress)
  • 4. Exadel Exadel ● Products and services company ● Founded in 1998, headquarters in Concord, CA ● 350+ employees City Country Year Concord California, USA 1998 Moscow Russia 1999 Minsk Belarus 2002 Vitebsk Belarus 2005 Donetsk, Kharkov Ukraine 2006
  • 5. Exadel Products ● Open Source with JBoss ◦ RichFaces ◦ JBoss Tools/JBoss Developer Studio ● Tiggr – create and share mockups online ● Flamingo ● Fiji (JSF – JavaFX/Flex integration) ● jsf4birt (JSF – BIRT/Actuate integration) ● JavaFX Plug-in for Eclipse
  • 6. Exadel Services ● Rich enterprise application development ● Eclipse development ● Custom rich component development ● Mobile development ● Training ● Most projects are done in Eastern Europe
  • 7. Exadel The Plan ● Ajax features in JSF 2 ● The new RichFaces 4
  • 8. Exadel JSF 2 ● JSF 2 is a major upgrade over JSF 1.x ● Many features, ideas taken from projects such as Seam and RichFaces, and others
  • 9. Exadel JSF 2 new features ● Facelets ● New scopes ● Composite ◦ Flash, View, components custom ● Navigation ● Configuration ● GET support ◦ Annotations ● BeanValidation ◦ Page parameters support ◦ h:link, h:button ● Ajax ● Resource loading
  • 10. Exadel JSF 2 <f:ajax> ● Basic Ajax functionality ● Greatyinspired by RichFaces 3 <a4j:support> tag ● Ajax in JSF in 3 easy steps: ◦ How to send an Ajax request ◦ Partial view processing ◦ Partial view rendering
  • 11. Exadel 2. What to execute on the server: ● @all 1. <f:ajax> and event takes ● @this (default) care of firing the Ajax ● @form request ● @none ● Id's ● EL <h:commandButton> <f:ajax event="click" execute="@form" render="@form id1 id2"/> <h:commandButton> 3. Partial view rendering: ● @all ● @this ● @form ● @none (default) ● Id's ● EL
  • 12. Exadel Using <f:ajax> <h:commandButton value="Submit" action="#{bean.action}" > <f:ajax event="focus" execute="@form" render="output"/> </h:commandButton> <h:panelGrid id="output"> ... Attaching to button, specifying event </h:panelGrid> <h:commandButton value="Submit" action="#{bean.action}" > <f:ajax execute="@form" render="output output2"/> </h:commandButton> <h:panelGrid id="output"> ... </h:panelGrid> <h:panelGrid id="output2"> ... No event specified, </h:panelGrid> using default event
  • 13. Exadel Using <f:ajax> Default event is onchange <h:inputText value="#{bean.text}" > <f:ajax event="keyup" render="text"/> </h:inputText> <h:outputText id="text" value="#{bean.text}" /> No event specified so using default <h:selectOneListbox id="list" value="#{bean.choice}" > <f:selectItems value="#{cean.choiceList}" /> <f:ajax render="info" listener="#{bean.change}"/> </h:selectOneListbox> <h:panelGrid id="info"> ... </h:panelGrid>
  • 14. Exadel <f:ajax> <h:panelGrid> No default event, no Ajax added <h:selectBooleanCheckbox> onchange <h:inputText> onchange <h:commandButton> onclick </h:panelGrid> </f:ajax> <f:ajax event="click"> <h:panelGrid> onclick <h:selectBooleanCheckbox> onclick <h:inputText> onclick <h:commandButton> onclick and onfocus <f:ajax event="focus"/> </h:commanButton> </h:panelGrid> </f:ajax> <f:ajax event="valueChange"> <h:panelGrid> No Ajax added <h:selectBooleanCheckbox> onchange <h:inputText> onchange <h:commandButton> onfocus <f:ajax event="focus"/> </h:commanButton> </h:panelGrid> </f:ajax>
  • 15. Exadel That's good, but a rich component framework is still need to build real-world Ajax applications.
  • 16. Exadel RichFaces 4 – rich JSF framework ● JSF 2 based ● Ajax components ◦ a4j:* tag library (core) ◦ rich:* tag library (UI) ● Skins and themes ● CDK – Component Development Kit
  • 17. Exadel RichFaces versions Version JSF 1.1 JSF 1.2 JSF 2 RichFaces 3.1.x • RichFaces 3.3.3* • • RichFaces 4 • * Note: RichFaces 3.3.3 has basic JSF 2 support
  • 18. Exadel What about deployment? Any server All browsers (even IE 6)
  • 19. Exadel RichFaces history 2005: started by Alexander Smirnov 2005-2007: Developed by Exadel Ajax4jsf – open source, free RichFaces - commercial 2007: JBoss takes over Exadel team continues to develop the framework
  • 20. Exadel Just tell me when RichFaces 4 is going to be released?
  • 21. Exadel RichFaces 4 JavaScript in RichFaces is now entirely based on the popular jQuery library.
  • 22. Exadel RichFaces 4 ● All components are reviewed for consistency, usability ● Redesigned following semantic HTML principles ● Server-side and client-side performance optimization ● Strict code clean-up and review
  • 23. Exadel RichFaces 4 ● Newand easy to use CDK (Component Development Kit) ● Quickly build your own custom rich components
  • 24. Exadel Google App Engine ● DeployRichFaces application in Google App Engine (GAE) ● Special maven-based plug-in available
  • 25. Exadel RichFaces <a4j:ajax> ● 100% based on standard <f:ajax> ● Just replacef: with a4j: and get exactly the same functionality ● But, you get extra features...
  • 26. Exadel <a4j:ajax> attributes Attribute Description onbegin JavaScript to execute before Ajax request JavaScript to execute after response onbeforedomupdate comes back but before DOM update oncomplete JavaScript to execute after DOM update Skips Update Model and Invoke bypassUpdates Application phases, useful for form validation Skips all a4j:outputPanel limitRender ajaxRender=”true” areas. Only renders what is set in current render status Status to display during Ajax request Sets focus on component after Ajax focus request
  • 27. Exadel RichFaces 4 That's not all, there are more RichFaces goodies...
  • 28. Exadel RichFaces 4 core action – fire an Ajax request ● a4j:ajax ● a4j:commandButton ● a4j:commandLink ● a4j:jsFunction ● a4j:poll ● a4j:push
  • 29. Exadel <a4j:commandButton> – Ajax button /* standard button with f:ajax */ <h:commandButton value="Save" action="#{bean.action}"> <f:ajax execute="@form" render="output"/> </h:commandButton> /* RichFaces button */ <a4j:commandButton value="Save" execute="@form" render="output" action="#{bean.action}" />
  • 30. Exadel <a4j:jsFunction> – fire Ajax request from any JavaScript function <table> ... <td onmouseover="update('yellow')"/> ... </table> <a4j:jsFunction name="update" action="#{bean.change}" reRender="panel"> <a4j:param value="param1" assignTo="#{bean.color}"/> </a4j:jsFunction>
  • 31. Exadel <a4j:poll> – periodically send an Ajax request <a4j:poll interval="1000" action="#{bean.count}" render="output" enabled="#{bean.pollEnabled}" /> <h:panelGrid id="output"> ... </h:panelGrid>
  • 32. Exadel RichFace 4 core – output, panels ● a4j:outputPanel ● a4j:status ● a4j:region ● a4j:queue ● a4j:repeat ● a4j:log
  • 33. Exadel <a4j:outputPanel> – auto rendered panel <h:selectOneMenu value="#{bean.fruit}"> <a4j:ajax listener="#{bean.change}"/> </<h:selectOneMenu> <a4j:outputPanel ajaxRendered="true"> <h:panelGrid> ... </h:panelGrid> Rendered on every <h:panelGrid> Ajax request ... </h:panelGrid> </a4j:outputPanel>
  • 34. Exadel <a4j:status> – Ajax request status <a4j:status name="ajaxSpecial"> <f:facet name="start"> <h:graphicImage value="ajaxStatus.jpg"/> </f:facet> </a4j:status> <h:form> <inputText /> <inputText /> <a4j:commandButton status="ajaxSpecial"/> </h:form>
  • 35. Exadel <a4j:region> – declaratively define execute region <h:form> Execute options: @all● <a4j:region> @this (default) ● <h:inputText /> @form ● <h:inputText /> @none ● Id's● <a4j:commandButton execute="@region"/> EL ● <a4j:region> @region ● </h:form> <h:form> <a4j:region> <h:inputText /> <h:inputText /> <a4j:commandButton /> <a4j:region> </h:form>
  • 36. Exadel <a4j:log> – Ajax request information ● Levels: ◦ debug, info, warn, error
  • 37. Exadel JavaScript interactions <h:commandLink value="Link" <f:ajax onevent="ajaxFunction();"> </h:commandLink> Called three times: 1) begin 2) success 3) complete <a4j:commandLink value="Link" onbegin="alert('Link clicked')" onbeforedomupdate="alert('Response received')" oncomplete="alert('DOM updated')"> </a4j:commandLink> Events are separated
  • 38. Exadel Advanced rendering options <a4j:commandButton render="output"/> <a4j:commandButton render="output" limitRender="true"/> <h:panelGrid id="output"> Turns off all auto rendered panels, ... only renders what is set in current </h:panelGrid> render <a4j:outputPanel ajaxRendered="true"> ... </a4j:outputPanel>
  • 39. Exadel Skipping phases when validating 1.Restore View 2.Apply Request Values 3.Process Validation 4.Update Model 5.Invoke Application 6.Render Response <h:inputText id="name" value="#{bean.name}"/> <a4j:ajax event="blur" bypassUpdates="true"/> </h:inputText> <rich:message for="name"/>
  • 40. Exadel JSF 2 queue ● JSF2 has very basic queue functionality ● Events are queued and fired one at a time ● Only one request is processed on the server at a time
  • 41. Exadel RichFaces queue upgrades ● Delay firing of a request ● Combine requests from one or more controls ● Cancel DOM updates if the same request was fired ● Define queue as: ◦ Global (all views have queue) ◦ View-based ◦ Form-based ◦ Named (used by particular components only)
  • 42. Exadel RichFaces <a4j:queue> <a4j:queue requestDelay="2000"/> ... Delay request by 2 seconds <a4j:commandButton value="Button1"/> <a4j:commandButton value="Button2"/> <a4j:queue requestDelay="2000"/> ... Overwrite default <a4j:commandButton> delay request by 1 second <a4j:attachQueue requestDelay="1000"/> </a4j:commmandButton> <a4j:commandButton />
  • 43. Exadel a4j:queue – “combining” events <a4j:queue requestDelay="2000"/> ... <a4j:commandButton> <a4j:attachQueue requestGroupingId="mainGroup"/> </a4j:commmandButton> <a4j:commandButton> <a4j:attachQueue requestGroupingId="mainGroup"/> </a4j:commmandButton>
  • 44. Exadel a4j:queue – ignoring “stale” responses <a4j:queue requestDelay="2000 ingoreDupResponses="true"/> <h:inputText value="#{bean.state}"> <a4j:ajax event="keyup" listener="#{bean.load}" render="states"/> </h:inputText> <rich:dataTable id="states"> <rich:column/> </rich:dataTable>
  • 45. Exadel RichFaces UI components ● Data iteration ● Output, panels ● Input ● Menu ● Trees ● Selects ● Layout ● Client side validation ● Miscellaneous
  • 46. Exadel Rich data iteration ● a4j:repeat ● rich:dataScroller ● rich:dataTable ● rich:column ● rich:extendedDataTable ● Columnand row ● rich:subTable spanning ● Filtering, sorting ◦ rich:subTableToggleControl ● rich:list ● rich:dataGrid
  • 47. Exadel Partial update render="@column" render="@header" render="@row" render="@body" render="@footer" render="cellId" To render from outside the table: render="tableId@header" render="tableId@body" render="tableId@footer"
  • 48. Exadel Partial update render="tableId:#{bean.rowsSet}" render="tableId:#{bean.rowsSet}:cellId"
  • 49. Exadel Rich output, panels ● rich:panel ● rich:message(s) ● rich:togglePanel ● rich:paint2D ● rich:accordion ● rich:separator ● rich:popupPanel ● rich:toolBar ● rich:tabPanel ● rich:toolTip ● rich:panelBar ● rich:panelMenu ● rich:collapsiblePanel
  • 50. Exadel Rich input ● rich:autocomplete ● rich:inputNumberSlider ● rich:inputNumberSpinner ● rich:inplaceInput ● rich:calendar ● rich:colorPicker ● rich:editor ● rich:fileUpload
  • 52. Exadel Rich tree ● rich:tree ● rich:treeNode ● Listeners
  • 53. Exadel Rich selects ● rich:orderingList ● rich:pickList ● rich:listShuttle ● rich:selectBox ● rich:inplaceSelect
  • 54. Exadel Rich layout ● rich:page ● rich:layout ◦ rich:layoutPanel ● rich:splitter
  • 55. Exadel Bean Validation (JSR 303) ● JSF 2 has support for Bean Validation (on the server) public class Bean { @Email private String email; } <h:inputText id="email" value="#{bean.email}"> <a4j:ajax event="blur"/> </h:inputText> <rich:message for="email"/>
  • 56. Exadel RichFaces client validation Public class Bean { @Email private String email; } <h:inputText id="email" value="#{bean.email}"> <rich:clientValidator event="blur"/> </h:inputText> <rich:message for="email"/>
  • 57. Exadel RichFaces client functions Function Description rich:client(id) returns component client id rich:element(id) returns DOM element returns RichFaces client component rich:component(id) instance to call JS API method rich:isUserInRole(role) returns if the user has specified role returns component instance for given rich:findComponent(id) short id
  • 58. Exadel rich:component(id) function ● Allows to call JS API on a component <input type="button" onclick="#{rich:component('popup')}.show();" value="Open" /> <rich:popupPanel id="popup"> <h:outputLink value="#" onclick="#{rich:component('popup')}.hide(); return false;"> <h:outputText value="Close"/> </h:outputLink> </rich:popupPanel>
  • 59. Exadel Rich miscellaneous ● rich:componentControl ● rich:jQuery ● rich:hotKey ● rich:gmap ● rich:virtualEarth
  • 60. Exadel <rich:componentControl> ● Allows to call JS API on a component in declarative fashion <h:outputLink id="openLink" value="#"> <h:outputText value="Open" /> <rich:componentControl event="click" operation="show" target="popup" /> </h:outputLink> <rich:popupPanel id="popup"> ... </rich:popupPanel>
  • 61. Exadel <rich:jQuery> <input type="button" id="changeButton" value="Change title" /> <rich:jQuery selector="#changeButton" query="click(function(){ $('#panel #panel_header').text('Capital of Russia'); })"/> <rich:panel header="Moscow" id="panel"> Moscow is the capital, the most populous ... </rich:panel>
  • 63. Exadel Skins ● Lightweight extension on top of CSS ● Change look and feel of all Rich component with a few minor changes ● Can be applied to standard JSF and HTML tags as well
  • 64. Exadel Ready-to-use skins ● classic ● emeraldTown ● blueSky ● ruby ● wine ● deepMarine ● plain ● japanCherry ● laguna <context-param> <param-name>org.richfaces.skin</param-name> ● glassX <param-value>ruby</param-value> </context-param> ● darkX
  • 65. Exadel Skin file (properties file) #Colors headerBackgroundColor=#900000 headerGradientColor=#DF5858 headerTextColor=#FFFFFF headerWeightFont=bold generalBackgroundColor=#f1f1f1 generalTextColor=#000000 generalSizeFont=11px generalFamilyFont=Arial, Verdana, sans-serif controlTextColor=#000000 controlBackgroundColor=#ffffff additionalBackgroundColor=#F9E4E4
  • 66. Exadel Skins ● Modify existing or create your own <context-param> <param-name>org.richfaces.skin</param-name> <param-value>myCustomSkin</param-value> </context-param> ● Change skins in runtime <context-param> <param-name>org.richfaces.skin</param-name> <param-value>#{bean.skin}</param-value> </context-param>
  • 67. Exadel Overwriting skins <style> .rf-p-hr { // your custom style, applied to all panels on // on page } .panelHeader { // custom header style } </style> <rich:panel id="panel1"> ... </rich:panel id="panel2"> <rich:panel headerClass="panelHeader"> ... </rich:panel>
  • 69. Exadel That's it for RichFaces, there is one more thing I want to show you.
  • 70. Exadel A peek at the future: Going Beyond JavaServer Faces 2.0 with RichFaces 4 Tuesday, September 21 9:30am Golden Gate 6/7 Jay Balunas, Red Hat Alexander Smirnov, Exadel
  • 73. Exadel Exadel Tiggr ● Create, collaborate and share mockups online ● RichFaces palette ● Upcoming features ◦ HTML generation ◦ More widgets and controls ● Give it a try - http://tiggr.exadel.com
  • 75. Exadel How can we help with RichFaces ● Webapplication development with RichFaces ● Custom component development ● Training: Training Days JSF 1.2, 2 1-2 RichFaces 3, 4 1-2 JSF and RichFaces 2-3 RichFaces 3 to 4 1-2
  • 76. Exadel Thank you! ● max@exadel.com ● http://mkblog.exadel.com ● http://twitter.com/maxkatz ● http://exadel.org