SlideShare a Scribd company logo
Rapid JSF Component
        Development   RichFaces CDK
JSF
Component
Libraries




      “...are essential part of
      JSF ecosystem, delivering
      great user experience”
“Components encapsulates complex
  logic, which is exposed with easy to use
  interface”




Proper
Level of
Abstraction
Building
Blocks




    “Components inter-cooperates
    in order to build complex application
    logic.”
“But what to do when is same
component missing in your favorite
component library?”
“Fortunately there are many JavaScript widget
libraries, which can be simply
used just for your needs”




                                   Bootstrap
Only for JavaScript kiddies?
“It's very simply to use these widgets,
they have as accessible API as JSF components”
“It is like going to library and choosing
book which best fit in your mood -
you can go and reuse JS widget”
4
ways
of reusing
JavaScript
widgets
#1   Direct JavaScript
#2   JSF Component
#3   JSF Composite Component
#4   RichFaces CDK
#1 Direct JavaScript
“Imagine big JSF application where you started
incorporating JavaScript widgets:
looks inconsistent and hardly readable.”
#2 JSF Component
“Let's build custom JSF component...”
What is component?
What is component?
   Tag
“Tag is representation of the component
in the page template code”
What is component?
   Tag
   Component Interface
“The component provides interface
for changing its configuration”




                                    Component
“This is source code of JSF component
a4j:commandLink”
“This is source code of JSF component
a4j:commandLink.”

“Let's look at the fragment.”
“The component is interface with list attributes,
     Represented as getters/setters of the component
     class”




“Each getter and setter just delegates to StateHelper
to keep the state of the component between subsequent
requests”
What is component?
   Tag
   Component Interface
   Renderer
“A renderer is responsible for translating
 the component to the page representation
 and then encoding the user input back to the
 component instance”



Component




Renderer
“A renderer is as verbose as
component code,
let's look at the sample of
h:dataTable component's
code”
“The renderer uses ResponseWriter
to add elements, attributes and text
content to the page.”

“The Java representation of the
renderer is very verbose, which leads
to readability and maintainability
concerns.”
What is component?
   Tag
   Component interface
   Renderer
   XML descriptors
     ●   taglib.xml
“taglib.xml descriptor is responsible for binding
the component from the page template
to the component class”



                                    Component




                                     Renderer
What is component?
   Tag
   Component interface
   Renderer
   XML descriptors
     ●   taglib.xml
     ●   faces-config.xml
“Faces-config.xml registers component into JSF ecosystem”




JSF
                                Component




                                  Renderer
What is component?
   Tag
   Component interface
   Renderer
   XML descriptors
     ●   faces-config.xml
     ●   taglib.xml
   Documentation
“Documentation is necessary for easiness of reuse of the components.”
But developing and maintaining all of these informations
is not really the way how to develop components
in the big scale.
#2 Composite Components
Composite Components
●   JSF2 feature
●   Provides XML representation
●   Allowing to write
    ●   HTML directly
    ●   Or compose JSF components
●   Developer needs to provide
    ●   Interface
    ●   Implementation
Rapid Turnaround
●   In the Development stage of the project
    ●   The composite component can be reloaded
    ●   Just with change of the source
But...
Immature / Incomplete
●   CC have still issues:
    ●   Partial state saving
        –   JAVASERVERFACES-2040
    ●   AJAX
        –   JAVASERVERFACES-1825
    ●   Submitted UIInput gets lost
        –   JAVASERVERFACES-1991
CC works great for composition of components
But they don't replace full-fledged component
                 development
Full-Fledged Development?
   Tag
   XML descriptors
     ●   faces-config.xml
     ●   taglib.xml
   Component interface
   Renderer
   Documentation

                            “So it means we need to get stuck with
                            full-fledged component development?”
What we actually need?
   Tag
   XML descriptors
     ●   faces-config.xml
     ●   taglib.xml
   Component interface
   Renderer (XML)
   Documentation
                            “Let's imagine that the most of the informations
                            are duplicates, which are actually expressed
                            by Component interface”
“And at this point, you recognize that some toolkit
may be needed to do the job!”
“Which is exactly what RichFaces CDK offers!”




         RichFaces CDK
        Component Development Kit
RichFaces CDK
●   Renderer
    ●   XML Templates
    ●   with syntax very close to Composite Components


●   Generated in the build-time
●   with Convention-over-Configuration in mind
But it is build-time tool, right?
Is it not too heavy-weight to use in development?
Rapid Turnaround
●   You can just use your IDE
●   And let Java Hot Deployment solutions to do
    the job
    ●   JRebel works very nice here
Resource Development
●   But Resources are as needed to develop
    rapidly as component/renderer code
    ●   JavaScript
    ●   CSS
●   Hot Deployment
    ●   using JSF application Development stage
Development Demo
Bootstrap




“Nothing prevents you to wrap all those libraries!”
Date-picker
Development Demo
Let's wrap those widgets!
Right level of abstraction
●   Let's take
    ●   favorite UI widget
    ●   or favorite widget set
●   Expose it to JSF
Don't reinvent a wheel!
●   When you want RichFaces component bend to
    use for your needs...
    ●   Take the component from GitHub
●   Fork the component
    ●   It's just matter of one click with GitHub!
●   Make it work as you need
Publish Your Work
●   Let others
    ●   review it
    ●   find bugs
●   Cooperate with others
    ●   More knowledge
    ●   Get bugs fixed
“And when you want to be part of the successful
community, you can go and open the source!”




 The Open Source Way
         RichFaces Sandbox

      “That's exactly how RichFaces Sandbox works.”
“The community contributions are hosted on the GitHub.
You can reuse them for your needs!”
“RichFaces team is investigating integration
In direction of several of open-source
JavaScript UI widgets.”




                                   Bootstrap




                               “The RichFaces Sandbox is used as part of this effort.”
References
bit.ly/rf-cdk
bit.ly/rf-planet
bit.ly/rf-forums


@RichFaces, #RichFaces, @LFryc


#richfaces – irc.freenode.net
Enjoy the Rich User Experience
THANK YOU!

     @LFRYC
BIT.LY/RF-PLANET
“Photographs used in presentation
have been authored by various authors,
published under Creative Commons license”




 http://www.flickr.com/photos/lonelyplanetexchange/2416006280/
 http://www.flickr.com/photos/davidbolton/4454944721/
 http://www.flickr.com/photos/bjvs/4283146424/
 http://www.flickr.com/photos/egansnow/288478628/
 http://www.flickr.com/photos/negativz/74267002/
 http://www.flickr.com/photos/kyknoord/5333012356/
 http://www.flickr.com/photos/wilhei/109403306/
 http://www.flickr.com/photos/kalmyket/691478431/
 http://www.flickr.com/photos/friarsbalsam/4609210182/
 http://www.flickr.com/photos/paul_lowry/2266388742/
 http://www.flickr.com/photos/breatheindigital/4689159475/
 http://www.flickr.com/photos/eschipul/206714304/

More Related Content

What's hot

Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Gabriel Villa
 
MEAN Stack
MEAN Stack MEAN Stack
MEAN Stack
RoshanTak1
 
Web development - Developing Web as A Team
Web development -  Developing Web as A TeamWeb development -  Developing Web as A Team
Web development - Developing Web as A Team
Muhammad Akbar Yasin
 
Introduction to react native with redux
Introduction to react native with reduxIntroduction to react native with redux
Introduction to react native with redux
Mike Melusky
 
gwt-pushstate
gwt-pushstategwt-pushstate
gwt-pushstate
Johannes Barop
 
How to Successfully Implement Headless Drupal
How to Successfully Implement Headless DrupalHow to Successfully Implement Headless Drupal
How to Successfully Implement Headless Drupal
Acquia
 
Building our App with React Native
Building our App with React NativeBuilding our App with React Native
Building our App with React Native
Nuxeo
 
Decoupled Architecture and WordPress
Decoupled Architecture and WordPressDecoupled Architecture and WordPress
Decoupled Architecture and WordPress
Pantheon
 
How To Write Dynamic Migrations - Mohit Aghera
How To Write Dynamic Migrations - Mohit AgheraHow To Write Dynamic Migrations - Mohit Aghera
How To Write Dynamic Migrations - Mohit Aghera
DrupalMumbai
 
Share point saturday presentation 9 29-2012-2
Share point saturday presentation 9 29-2012-2Share point saturday presentation 9 29-2012-2
Share point saturday presentation 9 29-2012-2
Derek Gusoff
 
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Conference
 
Full stack JavaScript - the folly of choice
Full stack JavaScript - the folly of choiceFull stack JavaScript - the folly of choice
Full stack JavaScript - the folly of choice
FDConf
 
Run Fast, Try Not to Break S**t
Run Fast, Try Not to Break S**tRun Fast, Try Not to Break S**t
Run Fast, Try Not to Break S**t
Michael Schmidt
 
Alloy Framework
Alloy FrameworkAlloy Framework
Alloy Framework
Mads Møller
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontends
Eugene Fidelin
 
Single Page Applications - Desert Code Camp 2012
Single Page Applications - Desert Code Camp 2012Single Page Applications - Desert Code Camp 2012
Single Page Applications - Desert Code Camp 2012
Adam Mokan
 
Ionic
IonicIonic
Rise and Fall of the Frontend Developer
Rise and Fall of the Frontend DeveloperRise and Fall of the Frontend Developer
Rise and Fall of the Frontend Developer
Rafael Casuso Romate
 
Midgard Create and editing content via RDFa
Midgard Create and editing content via RDFaMidgard Create and editing content via RDFa
Midgard Create and editing content via RDFa
Henri Bergius
 
Adobe Summit 2016 Bombardier’s AEM Implementation for Multi-sites Management
Adobe Summit 2016 Bombardier’s AEM Implementation for Multi-sites ManagementAdobe Summit 2016 Bombardier’s AEM Implementation for Multi-sites Management
Adobe Summit 2016 Bombardier’s AEM Implementation for Multi-sites Management
Ken Knitter
 

What's hot (20)

Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
 
MEAN Stack
MEAN Stack MEAN Stack
MEAN Stack
 
Web development - Developing Web as A Team
Web development -  Developing Web as A TeamWeb development -  Developing Web as A Team
Web development - Developing Web as A Team
 
Introduction to react native with redux
Introduction to react native with reduxIntroduction to react native with redux
Introduction to react native with redux
 
gwt-pushstate
gwt-pushstategwt-pushstate
gwt-pushstate
 
How to Successfully Implement Headless Drupal
How to Successfully Implement Headless DrupalHow to Successfully Implement Headless Drupal
How to Successfully Implement Headless Drupal
 
Building our App with React Native
Building our App with React NativeBuilding our App with React Native
Building our App with React Native
 
Decoupled Architecture and WordPress
Decoupled Architecture and WordPressDecoupled Architecture and WordPress
Decoupled Architecture and WordPress
 
How To Write Dynamic Migrations - Mohit Aghera
How To Write Dynamic Migrations - Mohit AgheraHow To Write Dynamic Migrations - Mohit Aghera
How To Write Dynamic Migrations - Mohit Aghera
 
Share point saturday presentation 9 29-2012-2
Share point saturday presentation 9 29-2012-2Share point saturday presentation 9 29-2012-2
Share point saturday presentation 9 29-2012-2
 
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
Shift Remote: JS - Javascript Build Tools: Past & Beyond - Shedrack Akintayo
 
Full stack JavaScript - the folly of choice
Full stack JavaScript - the folly of choiceFull stack JavaScript - the folly of choice
Full stack JavaScript - the folly of choice
 
Run Fast, Try Not to Break S**t
Run Fast, Try Not to Break S**tRun Fast, Try Not to Break S**t
Run Fast, Try Not to Break S**t
 
Alloy Framework
Alloy FrameworkAlloy Framework
Alloy Framework
 
Node.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontendsNode.js BFFs: our way to better/micro frontends
Node.js BFFs: our way to better/micro frontends
 
Single Page Applications - Desert Code Camp 2012
Single Page Applications - Desert Code Camp 2012Single Page Applications - Desert Code Camp 2012
Single Page Applications - Desert Code Camp 2012
 
Ionic
IonicIonic
Ionic
 
Rise and Fall of the Frontend Developer
Rise and Fall of the Frontend DeveloperRise and Fall of the Frontend Developer
Rise and Fall of the Frontend Developer
 
Midgard Create and editing content via RDFa
Midgard Create and editing content via RDFaMidgard Create and editing content via RDFa
Midgard Create and editing content via RDFa
 
Adobe Summit 2016 Bombardier’s AEM Implementation for Multi-sites Management
Adobe Summit 2016 Bombardier’s AEM Implementation for Multi-sites ManagementAdobe Summit 2016 Bombardier’s AEM Implementation for Multi-sites Management
Adobe Summit 2016 Bombardier’s AEM Implementation for Multi-sites Management
 

Similar to RichFaces CDK: Rapid JSF Component Development

Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
Marco Breveglieri
 
Introduction to React JS.pptx
Introduction to React JS.pptxIntroduction to React JS.pptx
Introduction to React JS.pptx
SHAIKIRFAN715544
 
Introduction to React native
Introduction to React nativeIntroduction to React native
Introduction to React native
Dhaval Barot
 
Introduction to ReactJS UI Web Dev .pptx
Introduction to ReactJS UI Web Dev .pptxIntroduction to ReactJS UI Web Dev .pptx
Introduction to ReactJS UI Web Dev .pptx
SHAIKIRFAN715544
 
Top 7 react developer tools to use in 2021
Top 7 react developer tools to use in 2021Top 7 react developer tools to use in 2021
Top 7 react developer tools to use in 2021
WrapPixel
 
Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]
GDSC UofT Mississauga
 
An evening with React Native
An evening with React NativeAn evening with React Native
An evening with React Native
Mike Melusky
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native
Eric Deng
 
Javascript spaghetti stirtrek_5_17
Javascript  spaghetti stirtrek_5_17Javascript  spaghetti stirtrek_5_17
Javascript spaghetti stirtrek_5_17
Jared Faris
 
Basic React Knowledge.
Basic React Knowledge.Basic React Knowledge.
Basic React Knowledge.
jacobryne
 
Lezione 03 Introduzione a react
Lezione 03   Introduzione a reactLezione 03   Introduzione a react
Lezione 03 Introduzione a react
University of Catania
 
React.js for Rails Developers
React.js for Rails DevelopersReact.js for Rails Developers
React.js for Rails Developers
Arkency
 
jsf2-composite-components
jsf2-composite-componentsjsf2-composite-components
jsf2-composite-components
Edward Burns
 
React.js - and how it changed our thinking about UI
React.js - and how it changed our thinking about UIReact.js - and how it changed our thinking about UI
React.js - and how it changed our thinking about UI
Marcin Grzywaczewski
 
Basic React Knowledge.
Basic React Knowledge.Basic React Knowledge.
Basic React Knowledge.
jacobryne
 
Welcome to React.pptx
Welcome to React.pptxWelcome to React.pptx
Welcome to React.pptx
PraveenKumar680401
 
Reactjs notes.pptx for web development- tutorial and theory
Reactjs  notes.pptx for web development- tutorial and theoryReactjs  notes.pptx for web development- tutorial and theory
Reactjs notes.pptx for web development- tutorial and theory
jobinThomas54
 
Getting Started with React, When You’re an Angular Developer
Getting Started with React, When You’re an Angular DeveloperGetting Started with React, When You’re an Angular Developer
Getting Started with React, When You’re an Angular Developer
Fabrit Global
 
React - The JavaScript Library for User Interfaces
React - The JavaScript Library for User InterfacesReact - The JavaScript Library for User Interfaces
React - The JavaScript Library for User Interfaces
Jumping Bean
 
European Collaboration Summit - SharePoint Framework Angular & Azure Functions
European Collaboration Summit - SharePoint Framework Angular & Azure FunctionsEuropean Collaboration Summit - SharePoint Framework Angular & Azure Functions
European Collaboration Summit - SharePoint Framework Angular & Azure Functions
Sébastien Levert
 

Similar to RichFaces CDK: Rapid JSF Component Development (20)

Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016Web Development with Delphi and React - ITDevCon 2016
Web Development with Delphi and React - ITDevCon 2016
 
Introduction to React JS.pptx
Introduction to React JS.pptxIntroduction to React JS.pptx
Introduction to React JS.pptx
 
Introduction to React native
Introduction to React nativeIntroduction to React native
Introduction to React native
 
Introduction to ReactJS UI Web Dev .pptx
Introduction to ReactJS UI Web Dev .pptxIntroduction to ReactJS UI Web Dev .pptx
Introduction to ReactJS UI Web Dev .pptx
 
Top 7 react developer tools to use in 2021
Top 7 react developer tools to use in 2021Top 7 react developer tools to use in 2021
Top 7 react developer tools to use in 2021
 
Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]Full Stack React Workshop [CSSC x GDSC]
Full Stack React Workshop [CSSC x GDSC]
 
An evening with React Native
An evening with React NativeAn evening with React Native
An evening with React Native
 
20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native
 
Javascript spaghetti stirtrek_5_17
Javascript  spaghetti stirtrek_5_17Javascript  spaghetti stirtrek_5_17
Javascript spaghetti stirtrek_5_17
 
Basic React Knowledge.
Basic React Knowledge.Basic React Knowledge.
Basic React Knowledge.
 
Lezione 03 Introduzione a react
Lezione 03   Introduzione a reactLezione 03   Introduzione a react
Lezione 03 Introduzione a react
 
React.js for Rails Developers
React.js for Rails DevelopersReact.js for Rails Developers
React.js for Rails Developers
 
jsf2-composite-components
jsf2-composite-componentsjsf2-composite-components
jsf2-composite-components
 
React.js - and how it changed our thinking about UI
React.js - and how it changed our thinking about UIReact.js - and how it changed our thinking about UI
React.js - and how it changed our thinking about UI
 
Basic React Knowledge.
Basic React Knowledge.Basic React Knowledge.
Basic React Knowledge.
 
Welcome to React.pptx
Welcome to React.pptxWelcome to React.pptx
Welcome to React.pptx
 
Reactjs notes.pptx for web development- tutorial and theory
Reactjs  notes.pptx for web development- tutorial and theoryReactjs  notes.pptx for web development- tutorial and theory
Reactjs notes.pptx for web development- tutorial and theory
 
Getting Started with React, When You’re an Angular Developer
Getting Started with React, When You’re an Angular DeveloperGetting Started with React, When You’re an Angular Developer
Getting Started with React, When You’re an Angular Developer
 
React - The JavaScript Library for User Interfaces
React - The JavaScript Library for User InterfacesReact - The JavaScript Library for User Interfaces
React - The JavaScript Library for User Interfaces
 
European Collaboration Summit - SharePoint Framework Angular & Azure Functions
European Collaboration Summit - SharePoint Framework Angular & Azure FunctionsEuropean Collaboration Summit - SharePoint Framework Angular & Azure Functions
European Collaboration Summit - SharePoint Framework Angular & Azure Functions
 

More from Lukáš Fryč

Role of QA in Continuous Delivery
Role of QA in Continuous DeliveryRole of QA in Continuous Delivery
Role of QA in Continuous Delivery
Lukáš Fryč
 
Arquillian: Helping web developers and QA get along
Arquillian: Helping web developers and QA get alongArquillian: Helping web developers and QA get along
Arquillian: Helping web developers and QA get along
Lukáš Fryč
 
JSF 2.2 Deep Dive with RichFaces 5
JSF 2.2 Deep Dive with RichFaces 5JSF 2.2 Deep Dive with RichFaces 5
JSF 2.2 Deep Dive with RichFaces 5
Lukáš Fryč
 
Web Components: Rethinking Web App Development
Web Components: Rethinking Web App DevelopmentWeb Components: Rethinking Web App Development
Web Components: Rethinking Web App Development
Lukáš Fryč
 
Web Technologies in Java EE 7
Web Technologies in Java EE 7Web Technologies in Java EE 7
Web Technologies in Java EE 7
Lukáš Fryč
 
Designing Top-Class Test Suites for Web Applications
Designing Top-Class Test Suites for Web ApplicationsDesigning Top-Class Test Suites for Web Applications
Designing Top-Class Test Suites for Web Applications
Lukáš Fryč
 
Arquillian: Effective tests from the client to the server
Arquillian: Effective tests from the client to the serverArquillian: Effective tests from the client to the server
Arquillian: Effective tests from the client to the server
Lukáš Fryč
 
Testing JSF with Arquillian and Selenium
Testing JSF with Arquillian and SeleniumTesting JSF with Arquillian and Selenium
Testing JSF with Arquillian and Selenium
Lukáš Fryč
 
RichFaces 4 rolling to Mobile Era
RichFaces 4 rolling to Mobile EraRichFaces 4 rolling to Mobile Era
RichFaces 4 rolling to Mobile Era
Lukáš Fryč
 

More from Lukáš Fryč (9)

Role of QA in Continuous Delivery
Role of QA in Continuous DeliveryRole of QA in Continuous Delivery
Role of QA in Continuous Delivery
 
Arquillian: Helping web developers and QA get along
Arquillian: Helping web developers and QA get alongArquillian: Helping web developers and QA get along
Arquillian: Helping web developers and QA get along
 
JSF 2.2 Deep Dive with RichFaces 5
JSF 2.2 Deep Dive with RichFaces 5JSF 2.2 Deep Dive with RichFaces 5
JSF 2.2 Deep Dive with RichFaces 5
 
Web Components: Rethinking Web App Development
Web Components: Rethinking Web App DevelopmentWeb Components: Rethinking Web App Development
Web Components: Rethinking Web App Development
 
Web Technologies in Java EE 7
Web Technologies in Java EE 7Web Technologies in Java EE 7
Web Technologies in Java EE 7
 
Designing Top-Class Test Suites for Web Applications
Designing Top-Class Test Suites for Web ApplicationsDesigning Top-Class Test Suites for Web Applications
Designing Top-Class Test Suites for Web Applications
 
Arquillian: Effective tests from the client to the server
Arquillian: Effective tests from the client to the serverArquillian: Effective tests from the client to the server
Arquillian: Effective tests from the client to the server
 
Testing JSF with Arquillian and Selenium
Testing JSF with Arquillian and SeleniumTesting JSF with Arquillian and Selenium
Testing JSF with Arquillian and Selenium
 
RichFaces 4 rolling to Mobile Era
RichFaces 4 rolling to Mobile EraRichFaces 4 rolling to Mobile Era
RichFaces 4 rolling to Mobile Era
 

Recently uploaded

GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 

Recently uploaded (20)

GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 

RichFaces CDK: Rapid JSF Component Development

  • 1. Rapid JSF Component Development RichFaces CDK
  • 2. JSF Component Libraries “...are essential part of JSF ecosystem, delivering great user experience”
  • 3. “Components encapsulates complex logic, which is exposed with easy to use interface” Proper Level of Abstraction
  • 4. Building Blocks “Components inter-cooperates in order to build complex application logic.”
  • 5. “But what to do when is same component missing in your favorite component library?”
  • 6. “Fortunately there are many JavaScript widget libraries, which can be simply used just for your needs” Bootstrap
  • 8. “It's very simply to use these widgets, they have as accessible API as JSF components”
  • 9. “It is like going to library and choosing book which best fit in your mood - you can go and reuse JS widget”
  • 11. #1 Direct JavaScript #2 JSF Component #3 JSF Composite Component #4 RichFaces CDK
  • 13. “Imagine big JSF application where you started incorporating JavaScript widgets: looks inconsistent and hardly readable.”
  • 15. “Let's build custom JSF component...”
  • 18. “Tag is representation of the component in the page template code”
  • 19. What is component?  Tag  Component Interface
  • 20. “The component provides interface for changing its configuration” Component
  • 21. “This is source code of JSF component a4j:commandLink”
  • 22. “This is source code of JSF component a4j:commandLink.” “Let's look at the fragment.”
  • 23. “The component is interface with list attributes, Represented as getters/setters of the component class” “Each getter and setter just delegates to StateHelper to keep the state of the component between subsequent requests”
  • 24. What is component?  Tag  Component Interface  Renderer
  • 25. “A renderer is responsible for translating the component to the page representation and then encoding the user input back to the component instance” Component Renderer
  • 26. “A renderer is as verbose as component code, let's look at the sample of h:dataTable component's code”
  • 27. “The renderer uses ResponseWriter to add elements, attributes and text content to the page.” “The Java representation of the renderer is very verbose, which leads to readability and maintainability concerns.”
  • 28. What is component?  Tag  Component interface  Renderer  XML descriptors ● taglib.xml
  • 29. “taglib.xml descriptor is responsible for binding the component from the page template to the component class” Component Renderer
  • 30.
  • 31. What is component?  Tag  Component interface  Renderer  XML descriptors ● taglib.xml ● faces-config.xml
  • 32. “Faces-config.xml registers component into JSF ecosystem” JSF Component Renderer
  • 33.
  • 34. What is component?  Tag  Component interface  Renderer  XML descriptors ● faces-config.xml ● taglib.xml  Documentation
  • 35. “Documentation is necessary for easiness of reuse of the components.”
  • 36. But developing and maintaining all of these informations is not really the way how to develop components in the big scale.
  • 38. Composite Components ● JSF2 feature ● Provides XML representation ● Allowing to write ● HTML directly ● Or compose JSF components ● Developer needs to provide ● Interface ● Implementation
  • 39. Rapid Turnaround ● In the Development stage of the project ● The composite component can be reloaded ● Just with change of the source
  • 41. Immature / Incomplete ● CC have still issues: ● Partial state saving – JAVASERVERFACES-2040 ● AJAX – JAVASERVERFACES-1825 ● Submitted UIInput gets lost – JAVASERVERFACES-1991
  • 42. CC works great for composition of components
  • 43. But they don't replace full-fledged component development
  • 44. Full-Fledged Development?  Tag  XML descriptors ● faces-config.xml ● taglib.xml  Component interface  Renderer  Documentation “So it means we need to get stuck with full-fledged component development?”
  • 45. What we actually need?  Tag  XML descriptors ● faces-config.xml ● taglib.xml  Component interface  Renderer (XML)  Documentation “Let's imagine that the most of the informations are duplicates, which are actually expressed by Component interface”
  • 46. “And at this point, you recognize that some toolkit may be needed to do the job!”
  • 47. “Which is exactly what RichFaces CDK offers!” RichFaces CDK Component Development Kit
  • 48. RichFaces CDK ● Renderer ● XML Templates ● with syntax very close to Composite Components ● Generated in the build-time ● with Convention-over-Configuration in mind
  • 49. But it is build-time tool, right? Is it not too heavy-weight to use in development?
  • 50. Rapid Turnaround ● You can just use your IDE ● And let Java Hot Deployment solutions to do the job ● JRebel works very nice here
  • 51. Resource Development ● But Resources are as needed to develop rapidly as component/renderer code ● JavaScript ● CSS ● Hot Deployment ● using JSF application Development stage
  • 53. Bootstrap “Nothing prevents you to wrap all those libraries!”
  • 55. Let's wrap those widgets!
  • 56. Right level of abstraction ● Let's take ● favorite UI widget ● or favorite widget set ● Expose it to JSF
  • 57. Don't reinvent a wheel! ● When you want RichFaces component bend to use for your needs... ● Take the component from GitHub ● Fork the component ● It's just matter of one click with GitHub! ● Make it work as you need
  • 58. Publish Your Work ● Let others ● review it ● find bugs ● Cooperate with others ● More knowledge ● Get bugs fixed
  • 59. “And when you want to be part of the successful community, you can go and open the source!” The Open Source Way RichFaces Sandbox “That's exactly how RichFaces Sandbox works.”
  • 60. “The community contributions are hosted on the GitHub. You can reuse them for your needs!”
  • 61. “RichFaces team is investigating integration In direction of several of open-source JavaScript UI widgets.” Bootstrap “The RichFaces Sandbox is used as part of this effort.”
  • 63. Enjoy the Rich User Experience
  • 64. THANK YOU! @LFRYC BIT.LY/RF-PLANET
  • 65. “Photographs used in presentation have been authored by various authors, published under Creative Commons license” http://www.flickr.com/photos/lonelyplanetexchange/2416006280/ http://www.flickr.com/photos/davidbolton/4454944721/ http://www.flickr.com/photos/bjvs/4283146424/ http://www.flickr.com/photos/egansnow/288478628/ http://www.flickr.com/photos/negativz/74267002/ http://www.flickr.com/photos/kyknoord/5333012356/ http://www.flickr.com/photos/wilhei/109403306/ http://www.flickr.com/photos/kalmyket/691478431/ http://www.flickr.com/photos/friarsbalsam/4609210182/ http://www.flickr.com/photos/paul_lowry/2266388742/ http://www.flickr.com/photos/breatheindigital/4689159475/ http://www.flickr.com/photos/eschipul/206714304/