SlideShare uma empresa Scribd logo
1 de 100
Baixar para ler offline
Ajax Applications with JSF 2
   and New RichFaces 4
       Max Katz, Exadel
         May 5, 2011
Exadel




Max Katz
● Senior   Systems Engineer at Exadel
● JSF,RichFaces, Java EE consulting,
 and training
● Manages exadel.org – Exadel's open
 source projects and community
● Community    manager for gotiggr.com
 – tool for creating and sharing
 interactive web and mobile HTML
 prototypes
Exadel




                                          4
                        Summer 2011




    Author of             Lead-author of
Practical RichFaces   Practical RichFaces, 2/e
     (Apress)           (Apress, June 2011)
Exadel




 Published
April 11, 2011
Exadel




Exadel is a global software
engineering company.
● Founded in 1998,


  headquarters in San Francisco
  Bay Area
● 7 development offices in


  Europe
● 350+ employees
Exadel
                               Exadel Offices

                                      Ekaterinburg
                     Moscow

         Minsk

                 Homyel

            5       Kharkov

Munich
                          Donetsk
Exadel




Open Source with JBoss
Exadel




Exadel Products
●   exadel.org
    ◦   Flamingo
    ◦   Fiji
    ◦   jsf4birt
    ◦   JavaFX Plug-in for Eclipse
●   gotiggr.com– build and share HTML
    prototypes
Exadel




Exadel Services
● Professional services
● Rich enterprise application
 development
● Eclipse development
● Custom rich   component development
● Mobile   development
● Training
Exadel




The Plan Is Simple


1) Ajax features in JSF 2

2) The new RichFaces 4
Exadel




JavaServer Faces™ (JSF) is
 the standard component-
 based user interface (UI)
    framework for the
 Java EE (5 & 6) platform
   JSF 1.2     Java EE 5
   JSF 2       Java EE 6
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
● Implicit             ● Configuration

 navigation             via annotations
● GET                  ● Bean Validation
        support
                        support
  ◦ h:link, h:button
                       ● Basic Ajax
● Resource   loading
Exadel




JSF 2 <f:ajax>
● Very   basic Ajax functionality
● Greatly
        inspired by RichFaces 3
 <a4j:support> tag
● Ajax in   JSF in 3 easy steps:
  1. Sending an Ajax request
  2.Partial view processing
  3.Partial view rendering
Exadel




<h:form>
   <h:input value="#{bean.word}"/>
   <h:commandButton>
      <f:ajax event="click" 1
              execute="@form" 2
              listener="#{bean.ajaxListener}"
              render="out1 out2"/> 3
   </h:commandButton>
   <h:input value="#{bean.text}" id="out1"/>
   <h:input value="#{bean.phrase}" id="out2"/>
</h:form>
Exadel




<h:form>
   <h:input value="#{bean.word}"/>
   <h:selectOneMenu value="#{bean.selected}">
      <f:selectItems value="#{bean.items}"/>
      <f:ajax event="change" 1
              execute="@form"   2
              listener="#{bean.ajaxListener}"
              render="@form"/> 3
   </h:commandButton>
   <h:input value="#{bean.text}" id="out1"/>
   <h:input value="#{bean.phrase}" id="out2"/>
</h:form>
Exadel




             Attribute   Value
Important
                         Event on which to fire the
<f:ajax>     event
                         Ajax request
attributes               @all
                         @this (default)
                         @form
             execute
                         @none
                         id's
                         EL
                         @all
                         @this
                         @form
             render
                         @none (default)
                         id's
                         EL
Exadel




 That's good, but where do
you get rich components and
            more?

A rich component framework
  is still(?) needed to build
           real-world
       Ajax applications.
Exadel




RichFaces 4 is a lightweight,
open source framework for
          JSF 2
Exadel




RichFaces 4 – rich JSF framework
   ● UI components

     ◦ a4j:* tag library (core)
     ◦ rich:* tag library (UI)
     ◦ Components' JavaScript API
   ● Skins
   ● Client-side   validation (Bean Validation
    based)
   ● CDK –   Component Development Kit
Exadel




RichFaces 4


  100% built on top of JSF2,
 just extends functionality in
            JSF 2
Exadel




RichFaces 4


 JavaScript 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


     Zero-configuration.
Just drop RichFaces into the
        application.
Exadel




RichFaces 4


 New client-side validation
 based on Bean Validation
         (JSR 303)
Exadel




RichFaces 4


  New, and easy to use CDK
   (Component Development Kit),
 allows quickly to build your
own custom rich components
Exadel




RichFaces 4


Run on: Tomcat 6/7, Resin,
JBoss AS 6/7, GlassFish 3.x,
             WebLogic
(run on any server when JSF 2 application
            can be deployed)
Exadel




RichFaces 4


 Run on: Google App Engine
   (GAE), Amazon EC2,
         CloudBees
Exadel




RichFaces 4


   JSF implementations:
    Mojarra or Myfaces
Exadel




RichFaces 4


        Any browser
Exadel




RichFaces 4


  Tooling support through
   JBoss Tools, IntelliJ,
         NetBeans
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




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, project is known as
      RichFaces
Exadel




RichFaces 4


   Let's look at RichFaces
  features in more detail...
Exadel




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




RichFaces 4


It's important to say it again,
 RichFaces only extends and
       upgrades JSF 2...
Exadel




      RichFaces <a4j:ajax>
       ● 100% based on     standard <f:ajax>
       ● Just replace f: with a4j: and get
         exactly the same functionality
       ● But,   you get extra features...
<h:commandButton>
   <f:ajax execute="@form" render="output"/>
</h:commandButton>

<h:commandButton>
   <a4j:ajax execute="@form" render="output"/>
</h:commandButton>
Exadel



    <a4j:ajax> attributes
Feature/Attribute                  Description

                    JavaScript to execute before Ajax
onbegin
                    request
                    JavaScript to execute after response
onbeforedomupdate
                    comes back but before DOM update

oncomplete          JavaScript to execute after DOM update

                    Allows to skip JSF phases when
bypassUpdates
                    validating

limitRender         Turns off all auto-rendered panels

status              Status to display during Ajax request

Ajax queue          Advanced RichFaces client queue
Exadel




      <a4j:commandButton/Link>
      – Ajax button/link
/* 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"
     render="output"
     action="#{bean.action}" />
Exadel


When using standard JSF button:
<h:form>
   <h:inputText>
   <h:selectOneMenu>
                                  Need to set
   <h:commandButton>              execute=”@form”
      <f:ajax execute="@form"/>   (or execute=”id1 id2”)
   </h:commandButton>
<h:form>


When using RichFaces button:
<h:form>                          RichFaces default
   <h:inputText>
   <h:selectOneMenu>
                                  value for
   <a4j:commandButton/>           button/link
<h:form>                          execute=”@form”
Exadel




      <a4j:jsFunction> – send Ajax
      request from any JavaScript
      function, HTML event
<table>
   ...
   <td onmouseover="update('yellow')"/>
   ...
</table>

<h:form>
 <a4j:jsFunction name="update"
      action="#{bean.change}" render="...">
   <a4j:param value="param1" assignTo="#{bean.color}"/>
 </a4j:jsFunction>
</h:form>
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




      <a4j:push>
       ● Server-side  events are pushed to
         client using Comet or WebSockets.
       ● Implemented    using Atmosphere
       ● Providesexcellent integration with
         EE containers, and advanced
         messaging services

<a4j:push address="topic@chat"
     ondataavailable="alert(event.rf.data)" />
Exadel



RichFace 4 core – advanced
rendering features
● <a4j:outputPanel>
● limitRender   attribute
● render=”{bean.renderList}”
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
</a4j:outputPanel>                         Ajax request
Exadel



      Advanced rendering options:
      limitRender

<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



       render=”#{bean.renderList}”
JSF                            RichFaces
1) Ajax request sent           1) Ajax request sent
2) Component id's to be        2) Component id's to
  rendered resolved              be rendered
3) Component id's are            resolved
  rendered into the page       3) Component id's
4) 2nd Ajax request is sent.     are rendered
  In this request the
  components (resolved in
  step 2 are sent with
  request) will be rendered
Exadel



RichFace 4 core – advanced
execute features
● <a4j:region>
● bypassUpdates   attribute
Exadel



<a4j:region> – declaratively
define execute region
<h:form>                                    Execute
 <a4j:region>                              options:
  <h:inputText />                          ● @all
  <h:inputText />
                                           ● @this
  <a4j:commandButton execute="@region"/>
                                           ● @form
 <a4j:region>
</h:form>                                  ● @none

                                           ● id's
<h:form>                                   ● EL
 <a4j:region>
                                           ● @region
   <h:inputText />
   <h:inputText />
   <a4j:commandButton />
 <a4j:region>
</h:form>
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




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



<a4j:commandLink value="Link"
   onbegin="ajaxOnBegin()"
   onbeforedomupdate="ajaxOnBeforeDomUpdate()"
   oncomplete="ajaxOnComplete()">
</a4j:commandLink>

                           Events are separated for easier development
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
● Combine
        requests from one or more
 components
● Delay firing   Ajax request
● Cancel DOM      updates if “similar” request
 was fired
● Define queue    as:
  ◦   Global (all views have queue)
  ◦   View-based
  ◦   Form-based
  ◦   Named (used by particular components only)
Exadel


      <a4j:queue> – “combining”
      events from the same
      component
<a4j:queue requestDelay="2000"/>
…
<a4j:commandButton value="Button A1"/>
<a4j:commandButton value="Button AB"/>



Events (clicks) from the same component
are “combined” which results in just one request
from a component being sent. Prevents sending multiple
request from the same component.
Exadel


      <a4j:queue> – “combining”
      events from different
      components

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




       <a4j:queue> delay
<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 />


Delay is a “wait” to combine similar events (events from the
same components) together.
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>
Exadel



RichFace 4 core – more
advanced features
● <a4j:status>
● <a4j:param>
● <a4j:log>
● JavaScript   interactions
Exadel



      <a4j:status> – Ajax request
      status



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

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




      <a4j:param>
       ● Similar to <f:param>   but simpler as it
         also assigns the value to a bean
         property automatically
<a4j:commandButton value="Save">
   <a4j:param name="#{bean.product}" value="1009"/>
</a4j:commandButton>

@ManagedBean
public class Bean {
   private String product; // getter and setter

}
Exadel



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

  ◦ debug, info, warn, error
Exadel




RichFaces UI components
● Output, panels
● Input
● Menu
● Data iteration
● Tree
● Drag   and drop
● Client   side validation
● Miscellaneous
Exadel




rich:tab




rich:accordion




rich:progressBar
Exadel




More rich output, panels
● rich:panel
● rich:togglePanel
● rich:popupPanel
● rich:collapsiblePanel
● rich:toolTip
Exadel




rich:calendar




rich:inplaceInput


rich:inputNumberSlider


rich:autocomplete
Exadel




More rich input
● rich:inputNumberSpinner
● rich:inplaceSelect
● rich:select
● rich:fileUpload
Exadel




rich:panelMenu




rich:toolBar


rich:dropDownMenu
Exadel




rich:dataTable




rich:dataTable with
rich:collapsibleSubTable



rich:dataScroller
Exadel




             Partial table 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 table update
render="tableId:rows(bean.rowsSet)"




render="tableId:rows(bean.rowsSet):cellId"
Exadel




More rich data iteration
● a4j:repeat
● rich:extendedDataTable
● rich:collapsibleSubTable
● rich:list

  ◦ list | ordered | definition
● rich:dataGrid
● rich:column

  ◦ Column and row spanning
  ◦ Filtering, sorting
Exadel




rich:tree
Exadel




Drag and drop
Exadel




Client-side validation based
    on Bean Validation
         (JSR 303)

    New in RichFaces 4
Exadel




      Bean Validation (JSR 303)
       ● JSF 2 has support for Bean Validation
         (server-side)
public class Bean {
  @Pattern(regexp="...")
  private String email;
}



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




    RichFaces client validation
        <rich:validator>

public class Bean {
  @Pattern(regexp="...")
  private String email;
}


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



  RichFaces <rich:graphValidator>
<rich:graphValidator value="#{bean}" id="gv">
   ...
   <h:inputText value="#{bean.password1}"/>
   <h:inputText value="#{bean.password2}"/>
   <rich:message for="email" for="gv"/>
</rich:graphValidator>

@Size(min=5,max=15,message="...")
private String password1;
@Size(min=5,max=15,message="...")
private String password2;

@AssertTrue(message="Passwords don't match")
public boolean isPasswordsEquals() {
   return password1.equals(password1);
}
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



Many RichFaces components
provide client-side JavaScript API
<rich:popupPanel> JavaScript API
Method name            Description
                       Return the top co-ordinate for the position of
getTop()
                       the pop-up panel.
                       Return the left co-ordinate for the position of
getLeft()
                       the pop-up panel.
                       Move the pop-up panel to the co-ordinates
moveTo(top,left)
                       specified with the top and left parameters.
                       Resize the pop-up panel to the size specified
resize(width,height)
                       with the width and height parameters.
show()                 Show the pop-up panel.
hide()                 Hide the pop-up panel.
Exadel




 Using <rich:component('id')>
<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:hashParam>
● <rich:jQuery>
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:hashParam>
       ● Group   client side parameters into a
         hash map to be passed to component
         client API
<h:commandButton value="Show popup">
   <rich:componentControl target="pp" operation="show">
      <rich:hashParam>
         <f:param name="width" value="500" />
         <f:param name="height" value="300" />
         <f:param name="minWidth" value="300" />
         <f:param name="minHeight" value="150" />
      </rich:hashParam>
   </rich:componentControl>
</h:commandButton
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       <context-param>
                  <param-name>org.richfaces.skin</param-name>
● wine            <param-value>ruby</param-value>
                </context-param>
● blueSky
● ruby
● emeraldTown
● deepMarine
● plain
● japanCherry
Exadel




      Skin file (just a property 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>myCoolSkin</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>
              1
 .rf-p-hr {
    // your custom style, applied to all panels on
    // on page
  }
 .panelHeader { 2
    // custom header style
  }
</style>

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



       Skinning standard JSF tags
       and HTML tags
Apply to each control:
<h:button style="background-color:
               '#{richSkin.tableBackgroundColor}'"/>



Apply to all standard controls (JSF and HTML):
<context-param>
   <param-name>
      org.richfaces.enableControlSkinning
   </param-name>
   <param-value>true</param-value>
</context-param>
Exadel



      Skinning standard JSF tags
      and HTML tags
<context-param>
   <param-name>
      org.richfaces.enableControlSkinningClasses
   </param-name>
   <param-value>true</param-value>
</context-param>

<div class="rfs-ctn">
   <h:panelGrid columns="1">
                               Can be applied to
      <h:outputText />         <h:panelGrid>, <rich:panel>, <div>
      <h:inputText />          Any standard controls inside the
      <h:commandButton />      container will be skinned using
   </h:panelGrid>              standard controls skinning classes.
</div>
Exadel



   Where can I try the new
       RichFaces 4?
http://richfaces.org/showcase
Exadel




        How can we help with RichFaces
● Web development
 with RichFaces
                                     Training      Days
● Version   3 to 4 migration   JSF 1.2, 2          1-2
● Performance    tune-up       RichFaces 3, 4      1-2
                               JSF and RichFaces   2-3
● Custom    component          RichFaces 3 to 4    1-2

 development
● On-site training
Exadel




RichFaces
Rich, flexible, robust, and
proven enterprise-level
extension to JSF 2
Exadel




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




http://gotiggr.com
Exadel




                   Tiggr Mobile Demo*
                   http://gotiggr.com




*Preview version
Exadel




Tiggr Prototypes          Tiggr Mobile
● Build and share        ● First of a
                                    kind, Web-
 interactive HTML          based IDE for building
 prototypes                and deploying hybrid
● Highly-interactive,
                           mobile apps
 define events/actions   ● Connect and invoke

● View,
                           remote services
      test in any
 browser, get feedback
Exadel




        max@exadel.com

Thank   @maxkatz
 you!
        mkblog.exadel.com

        gotiggr.com

Mais conteúdo relacionado

Mais procurados

Securing JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top TenSecuring JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top TenDavid Chandler
 
Modernize Your Real-World Application with Eclipse 4 and JavaFX
Modernize Your Real-World Application with Eclipse 4 and JavaFXModernize Your Real-World Application with Eclipse 4 and JavaFX
Modernize Your Real-World Application with Eclipse 4 and JavaFXCole Markham
 
JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)Hendrik Ebbers
 
Mastering OmniFaces - A Problem to Solution Approach
Mastering OmniFaces - A Problem to Solution ApproachMastering OmniFaces - A Problem to Solution Approach
Mastering OmniFaces - A Problem to Solution ApproachAnghel Leonard
 
JavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and EcosystemJavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and EcosystemAlexander Casall
 
Tutorial: extending the zend server ui and web api
Tutorial: extending the zend server ui and web apiTutorial: extending the zend server ui and web api
Tutorial: extending the zend server ui and web apiYonni Mendes
 
From Legacy Database to Domain Layer Using a New Cincom VisualWorks Tool
From Legacy Database to Domain Layer Using a New Cincom VisualWorks ToolFrom Legacy Database to Domain Layer Using a New Cincom VisualWorks Tool
From Legacy Database to Domain Layer Using a New Cincom VisualWorks ToolESUG
 
Desktop|Embedded Application API JSR
Desktop|Embedded Application API JSRDesktop|Embedded Application API JSR
Desktop|Embedded Application API JSRAndres Almiray
 
Developing Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJSDeveloping Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJSShekhar Gulati
 
25+ Reasons to use OmniFaces in JSF applications
25+ Reasons to use OmniFaces in JSF applications25+ Reasons to use OmniFaces in JSF applications
25+ Reasons to use OmniFaces in JSF applicationsAnghel Leonard
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful ControllersWO Community
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSFSoftServe
 
td_mxc_rubyrails_shin
td_mxc_rubyrails_shintd_mxc_rubyrails_shin
td_mxc_rubyrails_shintutorialsruby
 
XPages Blast - Lotusphere 2011
XPages Blast - Lotusphere 2011XPages Blast - Lotusphere 2011
XPages Blast - Lotusphere 2011Tim Clark
 

Mais procurados (20)

Securing JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top TenSecuring JSF Applications Against the OWASP Top Ten
Securing JSF Applications Against the OWASP Top Ten
 
DataFX - JavaOne 2013
DataFX - JavaOne 2013DataFX - JavaOne 2013
DataFX - JavaOne 2013
 
Modernize Your Real-World Application with Eclipse 4 and JavaFX
Modernize Your Real-World Application with Eclipse 4 and JavaFXModernize Your Real-World Application with Eclipse 4 and JavaFX
Modernize Your Real-World Application with Eclipse 4 and JavaFX
 
JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)
 
Mastering OmniFaces - A Problem to Solution Approach
Mastering OmniFaces - A Problem to Solution ApproachMastering OmniFaces - A Problem to Solution Approach
Mastering OmniFaces - A Problem to Solution Approach
 
JavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and EcosystemJavaOne - The JavaFX Community and Ecosystem
JavaOne - The JavaFX Community and Ecosystem
 
OmniFaces validators
OmniFaces validatorsOmniFaces validators
OmniFaces validators
 
Tutorial: extending the zend server ui and web api
Tutorial: extending the zend server ui and web apiTutorial: extending the zend server ui and web api
Tutorial: extending the zend server ui and web api
 
From Legacy Database to Domain Layer Using a New Cincom VisualWorks Tool
From Legacy Database to Domain Layer Using a New Cincom VisualWorks ToolFrom Legacy Database to Domain Layer Using a New Cincom VisualWorks Tool
From Legacy Database to Domain Layer Using a New Cincom VisualWorks Tool
 
Desktop|Embedded Application API JSR
Desktop|Embedded Application API JSRDesktop|Embedded Application API JSR
Desktop|Embedded Application API JSR
 
Developing Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJSDeveloping Modern Java Web Applications with Java EE 7 and AngularJS
Developing Modern Java Web Applications with Java EE 7 and AngularJS
 
25+ Reasons to use OmniFaces in JSF applications
25+ Reasons to use OmniFaces in JSF applications25+ Reasons to use OmniFaces in JSF applications
25+ Reasons to use OmniFaces in JSF applications
 
#JavaFX.forReal()
#JavaFX.forReal()#JavaFX.forReal()
#JavaFX.forReal()
 
D2W Stateful Controllers
D2W Stateful ControllersD2W Stateful Controllers
D2W Stateful Controllers
 
JavaEE 6 tools coverage
JavaEE 6 tools coverageJavaEE 6 tools coverage
JavaEE 6 tools coverage
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSF
 
td_mxc_rubyrails_shin
td_mxc_rubyrails_shintd_mxc_rubyrails_shin
td_mxc_rubyrails_shin
 
Jsf
JsfJsf
Jsf
 
The JavaFX Ecosystem
The JavaFX EcosystemThe JavaFX Ecosystem
The JavaFX Ecosystem
 
XPages Blast - Lotusphere 2011
XPages Blast - Lotusphere 2011XPages Blast - Lotusphere 2011
XPages Blast - Lotusphere 2011
 

Semelhante a Ajax Applications with JSF 2 and New RichFaces 4

Hands On With Rich Faces 4 - JavaOne 2010
Hands On With Rich Faces 4 - JavaOne 2010Hands On With Rich Faces 4 - JavaOne 2010
Hands On With Rich Faces 4 - JavaOne 2010Max Katz
 
Ajax Applications with JSF 2 and new RichFaces 4 - Herbstcampus
Ajax Applications with JSF 2 and new RichFaces 4 - HerbstcampusAjax Applications with JSF 2 and new RichFaces 4 - Herbstcampus
Ajax Applications with JSF 2 and new RichFaces 4 - HerbstcampusMax Katz
 
JSF 2: Myth of panacea? Magic world of user interfaces
JSF 2: Myth of panacea? Magic world of user interfacesJSF 2: Myth of panacea? Magic world of user interfaces
JSF 2: Myth of panacea? Magic world of user interfacesStrannik_2013
 
RichFaces: rich:* component library
RichFaces: rich:* component libraryRichFaces: rich:* component library
RichFaces: rich:* component libraryMax Katz
 
Going Above JSF 2.0 with RichFaces and Seam
Going Above JSF 2.0 with RichFaces and SeamGoing Above JSF 2.0 with RichFaces and Seam
Going Above JSF 2.0 with RichFaces and SeamLincoln III
 
Extending eZ Platform 2.x with Symfony and React
Extending eZ Platform 2.x with Symfony and ReactExtending eZ Platform 2.x with Symfony and React
Extending eZ Platform 2.x with Symfony and ReactPiotr Nalepa
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...Fabio Franzini
 
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4balunasj
 
Extending eZ Platform v2 with Symfony and React
Extending eZ Platform v2 with Symfony and ReactExtending eZ Platform v2 with Symfony and React
Extending eZ Platform v2 with Symfony and ReacteZ Systems
 
React Basic and Advance || React Basic
React Basic and Advance   || React BasicReact Basic and Advance   || React Basic
React Basic and Advance || React Basicrafaqathussainc077
 
Introduction to RichFaces
Introduction to RichFacesIntroduction to RichFaces
Introduction to RichFacesMax Katz
 
Java EE 6, Eclipse @ EclipseCon
Java EE 6, Eclipse @ EclipseConJava EE 6, Eclipse @ EclipseCon
Java EE 6, Eclipse @ EclipseConLudovic Champenois
 
Build 2017 - Whats new for Xamarin Devs
Build 2017 - Whats new for Xamarin DevsBuild 2017 - Whats new for Xamarin Devs
Build 2017 - Whats new for Xamarin DevsMike James
 
RichFaces 4 Component Deep Dive - JAX/JSFSummit
RichFaces 4 Component Deep Dive - JAX/JSFSummitRichFaces 4 Component Deep Dive - JAX/JSFSummit
RichFaces 4 Component Deep Dive - JAX/JSFSummitbalunasj
 
Javascript Bundling and modularization
Javascript Bundling and modularizationJavascript Bundling and modularization
Javascript Bundling and modularizationstbaechler
 

Semelhante a Ajax Applications with JSF 2 and New RichFaces 4 (20)

Hands On With Rich Faces 4 - JavaOne 2010
Hands On With Rich Faces 4 - JavaOne 2010Hands On With Rich Faces 4 - JavaOne 2010
Hands On With Rich Faces 4 - JavaOne 2010
 
Ajax Applications with JSF 2 and new RichFaces 4 - Herbstcampus
Ajax Applications with JSF 2 and new RichFaces 4 - HerbstcampusAjax Applications with JSF 2 and new RichFaces 4 - Herbstcampus
Ajax Applications with JSF 2 and new RichFaces 4 - Herbstcampus
 
JSF2
JSF2JSF2
JSF2
 
JSF 2: Myth of panacea? Magic world of user interfaces
JSF 2: Myth of panacea? Magic world of user interfacesJSF 2: Myth of panacea? Magic world of user interfaces
JSF 2: Myth of panacea? Magic world of user interfaces
 
RichFaces: rich:* component library
RichFaces: rich:* component libraryRichFaces: rich:* component library
RichFaces: rich:* component library
 
Going Above JSF 2.0 with RichFaces and Seam
Going Above JSF 2.0 with RichFaces and SeamGoing Above JSF 2.0 with RichFaces and Seam
Going Above JSF 2.0 with RichFaces and Seam
 
Extending eZ Platform 2.x with Symfony and React
Extending eZ Platform 2.x with Symfony and ReactExtending eZ Platform 2.x with Symfony and React
Extending eZ Platform 2.x with Symfony and React
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
 
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
A Peek At The Future: Going Beyond JavaServer Faces 2.0 With RichFaces 4
 
The JavaFX Ecosystem
The JavaFX EcosystemThe JavaFX Ecosystem
The JavaFX Ecosystem
 
The JavaFX Ecosystem
The JavaFX EcosystemThe JavaFX Ecosystem
The JavaFX Ecosystem
 
Extending eZ Platform v2 with Symfony and React
Extending eZ Platform v2 with Symfony and ReactExtending eZ Platform v2 with Symfony and React
Extending eZ Platform v2 with Symfony and React
 
React Basic and Advance || React Basic
React Basic and Advance   || React BasicReact Basic and Advance   || React Basic
React Basic and Advance || React Basic
 
Introduction to RichFaces
Introduction to RichFacesIntroduction to RichFaces
Introduction to RichFaces
 
Java EE 6, Eclipse @ EclipseCon
Java EE 6, Eclipse @ EclipseConJava EE 6, Eclipse @ EclipseCon
Java EE 6, Eclipse @ EclipseCon
 
Build 2017 - Whats new for Xamarin Devs
Build 2017 - Whats new for Xamarin DevsBuild 2017 - Whats new for Xamarin Devs
Build 2017 - Whats new for Xamarin Devs
 
RichFaces 4 Component Deep Dive - JAX/JSFSummit
RichFaces 4 Component Deep Dive - JAX/JSFSummitRichFaces 4 Component Deep Dive - JAX/JSFSummit
RichFaces 4 Component Deep Dive - JAX/JSFSummit
 
Jsf2 html5-jazoon
Jsf2 html5-jazoonJsf2 html5-jazoon
Jsf2 html5-jazoon
 
Javascript Bundling and modularization
Javascript Bundling and modularizationJavascript Bundling and modularization
Javascript Bundling and modularization
 
XPages Mobile, #dd13
XPages Mobile, #dd13XPages Mobile, #dd13
XPages Mobile, #dd13
 

Mais de Max Katz

Using cloud tools to build enterprise mobile apps with APIs fast
Using cloud tools to build enterprise mobile apps with APIs fast Using cloud tools to build enterprise mobile apps with APIs fast
Using cloud tools to build enterprise mobile apps with APIs fast Max Katz
 
Wolters Kluwer Tech. Conference: Disrupting Mobile Development
Wolters Kluwer Tech. Conference: Disrupting Mobile DevelopmentWolters Kluwer Tech. Conference: Disrupting Mobile Development
Wolters Kluwer Tech. Conference: Disrupting Mobile DevelopmentMax Katz
 
Tiggzi at DC jQuery Meetup
Tiggzi at DC jQuery MeetupTiggzi at DC jQuery Meetup
Tiggzi at DC jQuery MeetupMax Katz
 
Learn How to Build Mobile Apps Using Cloud Services
Learn How to Build Mobile Apps Using Cloud ServicesLearn How to Build Mobile Apps Using Cloud Services
Learn How to Build Mobile Apps Using Cloud ServicesMax Katz
 
Tiggr Mobile Apps Builder at Silicon Valley HTML5 Group Meetup
Tiggr Mobile Apps Builder at Silicon Valley HTML5 Group MeetupTiggr Mobile Apps Builder at Silicon Valley HTML5 Group Meetup
Tiggr Mobile Apps Builder at Silicon Valley HTML5 Group MeetupMax Katz
 
Tiggr - Web-based IDE for Mobile Web And Native Apps
Tiggr - Web-based IDE for Mobile Web And Native AppsTiggr - Web-based IDE for Mobile Web And Native Apps
Tiggr - Web-based IDE for Mobile Web And Native AppsMax Katz
 
Building Mobile Apps With jQuery For Any Device In The Cloud
Building Mobile Apps With jQuery For Any Device In The Cloud Building Mobile Apps With jQuery For Any Device In The Cloud
Building Mobile Apps With jQuery For Any Device In The Cloud Max Katz
 
Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011
Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011
Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011Max Katz
 
Devoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
Devoxx2010 - Mobile Development Choices: Native Apps vs Web AppsDevoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
Devoxx2010 - Mobile Development Choices: Native Apps vs Web AppsMax Katz
 
RichFaces skins
RichFaces skinsRichFaces skins
RichFaces skinsMax Katz
 
RichFaces: more concepts and features
RichFaces: more concepts and featuresRichFaces: more concepts and features
RichFaces: more concepts and featuresMax Katz
 
Rich Enterprise Applications with JavaFX
Rich Enterprise Applications with JavaFXRich Enterprise Applications with JavaFX
Rich Enterprise Applications with JavaFXMax Katz
 
Ajax Applications with RichFaces and JSF 2
Ajax Applications with RichFaces and JSF 2Ajax Applications with RichFaces and JSF 2
Ajax Applications with RichFaces and JSF 2Max Katz
 
Building RIA Applications with JavaFX
Building RIA Applications with JavaFXBuilding RIA Applications with JavaFX
Building RIA Applications with JavaFXMax Katz
 
Building RIA Applications with RichFaces
Building RIA Applications with RichFacesBuilding RIA Applications with RichFaces
Building RIA Applications with RichFacesMax Katz
 

Mais de Max Katz (15)

Using cloud tools to build enterprise mobile apps with APIs fast
Using cloud tools to build enterprise mobile apps with APIs fast Using cloud tools to build enterprise mobile apps with APIs fast
Using cloud tools to build enterprise mobile apps with APIs fast
 
Wolters Kluwer Tech. Conference: Disrupting Mobile Development
Wolters Kluwer Tech. Conference: Disrupting Mobile DevelopmentWolters Kluwer Tech. Conference: Disrupting Mobile Development
Wolters Kluwer Tech. Conference: Disrupting Mobile Development
 
Tiggzi at DC jQuery Meetup
Tiggzi at DC jQuery MeetupTiggzi at DC jQuery Meetup
Tiggzi at DC jQuery Meetup
 
Learn How to Build Mobile Apps Using Cloud Services
Learn How to Build Mobile Apps Using Cloud ServicesLearn How to Build Mobile Apps Using Cloud Services
Learn How to Build Mobile Apps Using Cloud Services
 
Tiggr Mobile Apps Builder at Silicon Valley HTML5 Group Meetup
Tiggr Mobile Apps Builder at Silicon Valley HTML5 Group MeetupTiggr Mobile Apps Builder at Silicon Valley HTML5 Group Meetup
Tiggr Mobile Apps Builder at Silicon Valley HTML5 Group Meetup
 
Tiggr - Web-based IDE for Mobile Web And Native Apps
Tiggr - Web-based IDE for Mobile Web And Native AppsTiggr - Web-based IDE for Mobile Web And Native Apps
Tiggr - Web-based IDE for Mobile Web And Native Apps
 
Building Mobile Apps With jQuery For Any Device In The Cloud
Building Mobile Apps With jQuery For Any Device In The Cloud Building Mobile Apps With jQuery For Any Device In The Cloud
Building Mobile Apps With jQuery For Any Device In The Cloud
 
Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011
Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011
Mobile Development Choices: Native Apps vs. Web Apps at JAX 2011
 
Devoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
Devoxx2010 - Mobile Development Choices: Native Apps vs Web AppsDevoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
Devoxx2010 - Mobile Development Choices: Native Apps vs Web Apps
 
RichFaces skins
RichFaces skinsRichFaces skins
RichFaces skins
 
RichFaces: more concepts and features
RichFaces: more concepts and featuresRichFaces: more concepts and features
RichFaces: more concepts and features
 
Rich Enterprise Applications with JavaFX
Rich Enterprise Applications with JavaFXRich Enterprise Applications with JavaFX
Rich Enterprise Applications with JavaFX
 
Ajax Applications with RichFaces and JSF 2
Ajax Applications with RichFaces and JSF 2Ajax Applications with RichFaces and JSF 2
Ajax Applications with RichFaces and JSF 2
 
Building RIA Applications with JavaFX
Building RIA Applications with JavaFXBuilding RIA Applications with JavaFX
Building RIA Applications with JavaFX
 
Building RIA Applications with RichFaces
Building RIA Applications with RichFacesBuilding RIA Applications with RichFaces
Building RIA Applications with RichFaces
 

Último

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Último (20)

"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

Ajax Applications with JSF 2 and New RichFaces 4

  • 1. Ajax Applications with JSF 2 and New RichFaces 4 Max Katz, Exadel May 5, 2011
  • 2. Exadel Max Katz ● Senior Systems Engineer at Exadel ● JSF,RichFaces, Java EE consulting, and training ● Manages exadel.org – Exadel's open source projects and community ● Community manager for gotiggr.com – tool for creating and sharing interactive web and mobile HTML prototypes
  • 3. Exadel 4 Summer 2011 Author of Lead-author of Practical RichFaces Practical RichFaces, 2/e (Apress) (Apress, June 2011)
  • 5. Exadel Exadel is a global software engineering company. ● Founded in 1998, headquarters in San Francisco Bay Area ● 7 development offices in Europe ● 350+ employees
  • 6. Exadel Exadel Offices Ekaterinburg Moscow Minsk Homyel 5 Kharkov Munich Donetsk
  • 8. Exadel Exadel Products ● exadel.org ◦ Flamingo ◦ Fiji ◦ jsf4birt ◦ JavaFX Plug-in for Eclipse ● gotiggr.com– build and share HTML prototypes
  • 9. Exadel Exadel Services ● Professional services ● Rich enterprise application development ● Eclipse development ● Custom rich component development ● Mobile development ● Training
  • 10. Exadel The Plan Is Simple 1) Ajax features in JSF 2 2) The new RichFaces 4
  • 11. Exadel JavaServer Faces™ (JSF) is the standard component- based user interface (UI) framework for the Java EE (5 & 6) platform JSF 1.2 Java EE 5 JSF 2 Java EE 6
  • 12. 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
  • 13. Exadel JSF 2 new features ● Facelets ● New scopes ● Composite ◦ Flash, View, components custom ● Implicit ● Configuration navigation via annotations ● GET ● Bean Validation support support ◦ h:link, h:button ● Basic Ajax ● Resource loading
  • 14. Exadel JSF 2 <f:ajax> ● Very basic Ajax functionality ● Greatly inspired by RichFaces 3 <a4j:support> tag ● Ajax in JSF in 3 easy steps: 1. Sending an Ajax request 2.Partial view processing 3.Partial view rendering
  • 15. Exadel <h:form> <h:input value="#{bean.word}"/> <h:commandButton> <f:ajax event="click" 1 execute="@form" 2 listener="#{bean.ajaxListener}" render="out1 out2"/> 3 </h:commandButton> <h:input value="#{bean.text}" id="out1"/> <h:input value="#{bean.phrase}" id="out2"/> </h:form>
  • 16. Exadel <h:form> <h:input value="#{bean.word}"/> <h:selectOneMenu value="#{bean.selected}"> <f:selectItems value="#{bean.items}"/> <f:ajax event="change" 1 execute="@form" 2 listener="#{bean.ajaxListener}" render="@form"/> 3 </h:commandButton> <h:input value="#{bean.text}" id="out1"/> <h:input value="#{bean.phrase}" id="out2"/> </h:form>
  • 17. Exadel Attribute Value Important Event on which to fire the <f:ajax> event Ajax request attributes @all @this (default) @form execute @none id's EL @all @this @form render @none (default) id's EL
  • 18. Exadel That's good, but where do you get rich components and more? A rich component framework is still(?) needed to build real-world Ajax applications.
  • 19. Exadel RichFaces 4 is a lightweight, open source framework for JSF 2
  • 20. Exadel RichFaces 4 – rich JSF framework ● UI components ◦ a4j:* tag library (core) ◦ rich:* tag library (UI) ◦ Components' JavaScript API ● Skins ● Client-side validation (Bean Validation based) ● CDK – Component Development Kit
  • 21. Exadel RichFaces 4 100% built on top of JSF2, just extends functionality in JSF 2
  • 22. Exadel RichFaces 4 JavaScript is now entirely based on the popular jQuery library
  • 23. 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
  • 24. Exadel RichFaces 4 Zero-configuration. Just drop RichFaces into the application.
  • 25. Exadel RichFaces 4 New client-side validation based on Bean Validation (JSR 303)
  • 26. Exadel RichFaces 4 New, and easy to use CDK (Component Development Kit), allows quickly to build your own custom rich components
  • 27. Exadel RichFaces 4 Run on: Tomcat 6/7, Resin, JBoss AS 6/7, GlassFish 3.x, WebLogic (run on any server when JSF 2 application can be deployed)
  • 28. Exadel RichFaces 4 Run on: Google App Engine (GAE), Amazon EC2, CloudBees
  • 29. Exadel RichFaces 4 JSF implementations: Mojarra or Myfaces
  • 30. Exadel RichFaces 4 Any browser
  • 31. Exadel RichFaces 4 Tooling support through JBoss Tools, IntelliJ, NetBeans
  • 32. 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
  • 33. 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, project is known as RichFaces
  • 34. Exadel RichFaces 4 Let's look at RichFaces features in more detail...
  • 35. Exadel RichFaces 4 core – sending an Ajax request ● a4j:ajax ● a4j:commandButton ● a4j:commandLink ● a4j:jsFunction ● a4j:poll ● a4j:push
  • 36. Exadel RichFaces 4 It's important to say it again, RichFaces only extends and upgrades JSF 2...
  • 37. Exadel RichFaces <a4j:ajax> ● 100% based on standard <f:ajax> ● Just replace f: with a4j: and get exactly the same functionality ● But, you get extra features... <h:commandButton> <f:ajax execute="@form" render="output"/> </h:commandButton> <h:commandButton> <a4j:ajax execute="@form" render="output"/> </h:commandButton>
  • 38. Exadel <a4j:ajax> attributes Feature/Attribute Description JavaScript to execute before Ajax onbegin request JavaScript to execute after response onbeforedomupdate comes back but before DOM update oncomplete JavaScript to execute after DOM update Allows to skip JSF phases when bypassUpdates validating limitRender Turns off all auto-rendered panels status Status to display during Ajax request Ajax queue Advanced RichFaces client queue
  • 39. Exadel <a4j:commandButton/Link> – Ajax button/link /* 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" render="output" action="#{bean.action}" />
  • 40. Exadel When using standard JSF button: <h:form> <h:inputText> <h:selectOneMenu> Need to set <h:commandButton> execute=”@form” <f:ajax execute="@form"/> (or execute=”id1 id2”) </h:commandButton> <h:form> When using RichFaces button: <h:form> RichFaces default <h:inputText> <h:selectOneMenu> value for <a4j:commandButton/> button/link <h:form> execute=”@form”
  • 41. Exadel <a4j:jsFunction> – send Ajax request from any JavaScript function, HTML event <table> ... <td onmouseover="update('yellow')"/> ... </table> <h:form> <a4j:jsFunction name="update" action="#{bean.change}" render="..."> <a4j:param value="param1" assignTo="#{bean.color}"/> </a4j:jsFunction> </h:form>
  • 42. 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>
  • 43. Exadel <a4j:push> ● Server-side events are pushed to client using Comet or WebSockets. ● Implemented using Atmosphere ● Providesexcellent integration with EE containers, and advanced messaging services <a4j:push address="topic@chat" ondataavailable="alert(event.rf.data)" />
  • 44. Exadel RichFace 4 core – advanced rendering features ● <a4j:outputPanel> ● limitRender attribute ● render=”{bean.renderList}”
  • 45. 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 </a4j:outputPanel> Ajax request
  • 46. Exadel Advanced rendering options: limitRender <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>
  • 47. Exadel render=”#{bean.renderList}” JSF RichFaces 1) Ajax request sent 1) Ajax request sent 2) Component id's to be 2) Component id's to rendered resolved be rendered 3) Component id's are resolved rendered into the page 3) Component id's 4) 2nd Ajax request is sent. are rendered In this request the components (resolved in step 2 are sent with request) will be rendered
  • 48. Exadel RichFace 4 core – advanced execute features ● <a4j:region> ● bypassUpdates attribute
  • 49. Exadel <a4j:region> – declaratively define execute region <h:form> Execute <a4j:region> options: <h:inputText /> ● @all <h:inputText /> ● @this <a4j:commandButton execute="@region"/> ● @form <a4j:region> </h:form> ● @none ● id's <h:form> ● EL <a4j:region> ● @region <h:inputText /> <h:inputText /> <a4j:commandButton /> <a4j:region> </h:form>
  • 50. 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"/>
  • 51. Exadel JavaScript interactions <h:commandLink value="Link" <f:ajax onevent="ajaxEvent();"> </h:commandLink> Called three times: 1) begin 2) success 3) complete <a4j:commandLink value="Link" onbegin="ajaxOnBegin()" onbeforedomupdate="ajaxOnBeforeDomUpdate()" oncomplete="ajaxOnComplete()"> </a4j:commandLink> Events are separated for easier development
  • 52. 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
  • 53. Exadel RichFaces queue upgrades ● Combine requests from one or more components ● Delay firing Ajax request ● Cancel DOM updates if “similar” request was fired ● Define queue as: ◦ Global (all views have queue) ◦ View-based ◦ Form-based ◦ Named (used by particular components only)
  • 54. Exadel <a4j:queue> – “combining” events from the same component <a4j:queue requestDelay="2000"/> … <a4j:commandButton value="Button A1"/> <a4j:commandButton value="Button AB"/> Events (clicks) from the same component are “combined” which results in just one request from a component being sent. Prevents sending multiple request from the same component.
  • 55. Exadel <a4j:queue> – “combining” events from different components <a4j:queue requestDelay="2000"/> ... <a4j:commandButton> <a4j:attachQueue requestGroupingId="ajaxGroup"/> </a4j:commmandButton> <a4j:commandButton> <a4j:attachQueue requestGroupingId="ajaxGroup"/> </a4j:commmandButton>
  • 56. Exadel <a4j:queue> delay <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 /> Delay is a “wait” to combine similar events (events from the same components) together.
  • 57. 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>
  • 58. Exadel RichFace 4 core – more advanced features ● <a4j:status> ● <a4j:param> ● <a4j:log> ● JavaScript interactions
  • 59. Exadel <a4j:status> – Ajax request status <a4j:status name="ajaxStatus"> <f:facet name="start"> <h:graphicImage value="ajaxStatus.jpg"/> </f:facet> </a4j:status> <h:form> <a4j:commandButton status="ajaxStatus"/> </h:form>
  • 60. Exadel <a4j:param> ● Similar to <f:param> but simpler as it also assigns the value to a bean property automatically <a4j:commandButton value="Save"> <a4j:param name="#{bean.product}" value="1009"/> </a4j:commandButton> @ManagedBean public class Bean { private String product; // getter and setter }
  • 61. Exadel <a4j:log> – Ajax request information ● Levels: ◦ debug, info, warn, error
  • 62. Exadel RichFaces UI components ● Output, panels ● Input ● Menu ● Data iteration ● Tree ● Drag and drop ● Client side validation ● Miscellaneous
  • 64. Exadel More rich output, panels ● rich:panel ● rich:togglePanel ● rich:popupPanel ● rich:collapsiblePanel ● rich:toolTip
  • 66. Exadel More rich input ● rich:inputNumberSpinner ● rich:inplaceSelect ● rich:select ● rich:fileUpload
  • 69. Exadel Partial table 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"
  • 70. Exadel Partial table update render="tableId:rows(bean.rowsSet)" render="tableId:rows(bean.rowsSet):cellId"
  • 71. Exadel More rich data iteration ● a4j:repeat ● rich:extendedDataTable ● rich:collapsibleSubTable ● rich:list ◦ list | ordered | definition ● rich:dataGrid ● rich:column ◦ Column and row spanning ◦ Filtering, sorting
  • 74. Exadel Client-side validation based on Bean Validation (JSR 303) New in RichFaces 4
  • 75. Exadel Bean Validation (JSR 303) ● JSF 2 has support for Bean Validation (server-side) public class Bean { @Pattern(regexp="...") private String email; } <h:inputText id="email" value="#{bean.email}"> <a4j:ajax event="blur"/> </h:inputText> <rich:message for="email"/>
  • 76. Exadel RichFaces client validation <rich:validator> public class Bean { @Pattern(regexp="...") private String email; } <h:inputText id="email" value="#{bean.email}"> <rich:validator/> </h:inputText> <rich:message for="email"/>
  • 77. Exadel RichFaces <rich:graphValidator> <rich:graphValidator value="#{bean}" id="gv"> ... <h:inputText value="#{bean.password1}"/> <h:inputText value="#{bean.password2}"/> <rich:message for="email" for="gv"/> </rich:graphValidator> @Size(min=5,max=15,message="...") private String password1; @Size(min=5,max=15,message="...") private String password2; @AssertTrue(message="Passwords don't match") public boolean isPasswordsEquals() { return password1.equals(password1); }
  • 78. 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
  • 79. Exadel Many RichFaces components provide client-side JavaScript API <rich:popupPanel> JavaScript API Method name Description Return the top co-ordinate for the position of getTop() the pop-up panel. Return the left co-ordinate for the position of getLeft() the pop-up panel. Move the pop-up panel to the co-ordinates moveTo(top,left) specified with the top and left parameters. Resize the pop-up panel to the size specified resize(width,height) with the width and height parameters. show() Show the pop-up panel. hide() Hide the pop-up panel.
  • 80. Exadel Using <rich:component('id')> <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>
  • 81. Exadel Rich miscellaneous ● <rich:componentControl> ● <rich:hashParam> ● <rich:jQuery>
  • 82. 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>
  • 83. Exadel <rich:hashParam> ● Group client side parameters into a hash map to be passed to component client API <h:commandButton value="Show popup"> <rich:componentControl target="pp" operation="show"> <rich:hashParam> <f:param name="width" value="500" /> <f:param name="height" value="300" /> <f:param name="minWidth" value="300" /> <f:param name="minHeight" value="150" /> </rich:hashParam> </rich:componentControl> </h:commandButton
  • 84. 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>
  • 86. 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
  • 87. Exadel Ready-to-use skins ● classic <context-param> <param-name>org.richfaces.skin</param-name> ● wine <param-value>ruby</param-value> </context-param> ● blueSky ● ruby ● emeraldTown ● deepMarine ● plain ● japanCherry
  • 88. Exadel Skin file (just a property 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
  • 89. Exadel Skins ● Modify existing or create your own <context-param> <param-name>org.richfaces.skin</param-name> <param-value>myCoolSkin</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>
  • 90. Exadel Overwriting skins <style> 1 .rf-p-hr { // your custom style, applied to all panels on // on page } .panelHeader { 2 // custom header style } </style> <rich:panel id="panel1"> ... </rich:panel id="panel2"> <rich:panel headerClass="panelHeader"> ... </rich:panel>
  • 91. Exadel Skinning standard JSF tags and HTML tags Apply to each control: <h:button style="background-color: '#{richSkin.tableBackgroundColor}'"/> Apply to all standard controls (JSF and HTML): <context-param> <param-name> org.richfaces.enableControlSkinning </param-name> <param-value>true</param-value> </context-param>
  • 92. Exadel Skinning standard JSF tags and HTML tags <context-param> <param-name> org.richfaces.enableControlSkinningClasses </param-name> <param-value>true</param-value> </context-param> <div class="rfs-ctn"> <h:panelGrid columns="1"> Can be applied to <h:outputText /> <h:panelGrid>, <rich:panel>, <div> <h:inputText /> Any standard controls inside the <h:commandButton /> container will be skinned using </h:panelGrid> standard controls skinning classes. </div>
  • 93. Exadel Where can I try the new RichFaces 4? http://richfaces.org/showcase
  • 94. Exadel How can we help with RichFaces ● Web development with RichFaces Training Days ● Version 3 to 4 migration JSF 1.2, 2 1-2 ● Performance tune-up RichFaces 3, 4 1-2 JSF and RichFaces 2-3 ● Custom component RichFaces 3 to 4 1-2 development ● On-site training
  • 95. Exadel RichFaces Rich, flexible, robust, and proven enterprise-level extension to JSF 2
  • 96. Exadel That's it for RichFaces, there is one more thing I want to show you.
  • 98. Exadel Tiggr Mobile Demo* http://gotiggr.com *Preview version
  • 99. Exadel Tiggr Prototypes Tiggr Mobile ● Build and share ● First of a kind, Web- interactive HTML based IDE for building prototypes and deploying hybrid ● Highly-interactive, mobile apps define events/actions ● Connect and invoke ● View, remote services test in any browser, get feedback
  • 100. Exadel max@exadel.com Thank @maxkatz you! mkblog.exadel.com gotiggr.com