SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
EXPLORING JSF 2.0
     AND
  PRIMEFACES
    Cagatay Civici

         PRIME
       TECHNOLOGY
Cagatay Civici
JSF EG (Expert Group) Member
PrimeFaces Lead
Apache MyFaces PMC
Speaker, Author, Reviewer
Consultant and Trainer for Prime Technology
Topics
JSF Overview
What’s New in JSF 2.0?
Go beyond with PrimeFaces
JSF Overview
Standard for Java EE
Component Oriented
Event Driven
RenderKits (web, mobile ...)
History
JSR 127 - JSF 1
JSR 252 - JSF 1.2
JSR-314 - JSF 2.0 <- Coolest one
JSF Ecosytem
Apache Software Foundation (MyFaces, Trinidad, Tobago, Tomahawk, ExtVal...)

Oracle (ADF Faces - Mojarra Implementation)

IBM (IBM JSF Component)

Prime Technology (PrimeFaces)

VMware/SpringSource (Spring WebFlow)

RedHat/JBoss (Seam, RichFaces)

JAVA EE 6 (CDI, Bean Validation)

Other *Faces libs
JSF 2.0 Highlights
         Powered by Community Feedback

Facelets/VDL                   • Navigations

AJAX                           • Resource Loading
                               • Bookmarking
Custom Components
                               • New Event API
Behaviors
                               • Exception Handling
Partial State                  • JSR-303 Bean Validation

                and general pain relief
JSP with JSF
Mismatch
JSP tags create JSF components
Content vs Component
Two different lifecycles
Facelets / VDL
XHTML based
Optimized for JSF
Templating
New View Declaration Language API

NOW STANDARD!
AJAX and JSF 1.x
Good match (Partial Output)
Wheel reinvented by;
 IceFaces       PrimeFaces     Trinidad   Tomahawk

 RichFaces      OpenFaces     ADF Faces     *Faces

Compatibility issues
AJAX and JSF 2.0
Now Standard!
New APIs;
  Server: PartialViewContext
  Client: jsf.ajax.AjaxRequest
New tag;
  <f:ajax />
AJAX and JSF 2.0
PartialViewContext API
Partial Processing (execute)
Partial Rendering (render)
Standard request parameters
f:ajax
Ajax Behavior
<h:inputText value=”#{bean.value}”>
 <f:ajax render=”display”/>
</h:inputText>
<h:outputText id=”display” />

<h:inputText value=”#{bean.value}”>
 <f:ajax render=”display” execute=”@this”/>
</h:inputText>
<h:outputText id=”display” />

<h:inputText value=”#{bean.value}”>
 <f:ajax render=”display” execute=”@this” event=”blur”/>
</h:inputText>
<h:outputText id=”display” />
No XML
faces-config.xml is not optional
Get rid of;
  <managed-bean />
  <navigaton-case />
  <component />, <renderer />
  <converter />, <validator />
  ...
Managed Beans with JSF 1.x
<managed-bean>
 <managed-bean-name>itemView</managed-bean-name>
 <managed-bean-class>com.prime.view.itemView</managed-bean-class>
 <managed-bean-scope>request</managed-bean-scope>
</managed-bean>



package com.prime.view;

public class ItemView {
}
Managed Beans with JSF 2.0

                          NO XML

@ManagedBean
public class ItemView {
}
Dependencies with JSF 1.x
<managed-bean>
  <managed-bean-name>itemView</managed-bean-name>
  <managed-bean-class>com.prime.view.itemView</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
     <property-name>itemService</property-name>
     <value>#{itemService}</value>
  </managed-property>
</managed-bean>

<managed-bean>
   <managed-bean-name>itemService</managed-bean-name>
   <managed-bean-class>com.prime.service.ItemServiceImpl</managed-bean-class>
   <managed-bean-scope>application</managed-bean-scope>
 </managed-bean>


 package com.prime.view;

public class ItemView {
     private ItemService itemService;

      //getter&setter
}
Dependencies with JSF 2.0
                            NO XML
@ManagedBean(name=”itemService”)
@ApplicationScoped
public class ItemServiceImpl implements ItemService {

}


@ManagedBean
public class ItemView {

    @ManagedProperty(value=”itemService”)
    private ItemService itemService;

      //getter&setter

}
Scopes
@RequestScoped
@ViewScoped
@SessionScoped
@CustomScoped
Flash scope
View Scope
Between request and session
Lives for postbacks
#{viewScope}
UIViewRoot.getViewMap()
Flash Scope
ROR concept
Lives in subsequent request
Survives redirect
Post-Redirect-Get
#{flash}
ExternalContext.getFlash()
System Events
Phaselisteners are not enough
Subscribe to various events in lifecycle
  Application Events
  Component Events
Application Events
Application wide events
  ExceptionQueuedEvent
  PostConstructApplicationEvent
  PreDestroyApplicationEvent
  more...
Component Events
  View based events
     PostAddToViewEvent
     PreValidateEvent
     PreRenderViewEvent
     more...
<h:inputText value=”#{bean.value}”>
 <f:event type=”preValidate” listener=”#{bean.preValidate}” />
</h:inputText>
Event Listeners
New API SystemEventListener
  isListenerForSource(Object source)
  processEvent(SystemEvent event)
Configure via xml or @ListenerFor
Application.subscribeToEvent(event, listener);
UIComponent.subscribeToEvent(event, listener);
Navigations
Implicit Navigation
Configurable NavigationHandler
Navigations with JSF 1.x
<navigation-rule>
 <from-view-id>/source.xhtml</from-view-id>
 <navigation-case>
    <from-outcome>success</from-outcome>
    <to-view-id>target.xhtml</to-view-id>
 </navigation-case>
</navigation-rule>


public String buttonClick() {
    return “success”;
}




      source.xhtml                            target.xhtml
Navigations with JSF 2.0

                            NO XML

public String buttonClick() {
    return “target”;
}




      source.xhtml                   target.xhtml
GET Support
Navigate by GET
View Metadata and View Parameters
Bookmarkable URLs
Post-Redirect-Get
GET Support with JSF 1.x
  Assigned when bean is used for first time
  No validation/conversion support
  No post assignment listener (init view)
http://www.site.com/itemView.jsf?itemId=10


<managed-bean>
  <managed-bean-name>itemView</managed-bean-name>
  <managed-bean-class>com.prime.view.itemView</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
  <managed-property>
     <property-name>itemId</property-name>
     <value>#{param[‘itemId’]}</value>
  </managed-property>
</managed-bean>
GET Support with JSF 2.0
 Introducing ViewParameters
 Validation/conversion support
 Post assignment listener (init view)
http://www.site.com/itemView.jsf?itemId=10


<f:view>
 <f:metadata>
    <f:viewParam name=”itemId” value=”#{itemView.itemId}” />
 </f:metadata>
</f:view>
GET Support with JSF 2.0
  Validation/conversion support

<f:view>
 <f:metadata>
    <f:viewParam name=”itemId” value=”#{itemView.itemId}”>
      <f:validator validatorId=”itemValidator” />
    </f:viewParam>
 </f:metadata>
</f:view>
GET Support with JSF 2.0
  Post mapping listener
<f:view>
 <f:metadata>
    <f:viewParam name=”itemId” value=”#{itemView.itemId}”>
      <f:validator validatorId=”itemValidator” />
    </f:viewParam>

    <f:event type=”preRenderView” listener=”#{itemView.loadItem}”/>
 </f:metadata>
</f:view>



public void loadItem() {
  //load item with itemId from datatabase
}
GET Support with JSF 1.2
 GET component h:outputLink
 <h:outputLink value=”#{request.contextPath}”/itemView.jsf?itemId=10>
  View Item
</h:outputLink>

 Manual URL generation
 No support for;
    context-path
    navigation-rules
GET Support with JSF 2.0
<h:button /> and <h:link />
<h:link outcome=”main” />


<h:button outcome=”main” includeViewParams=”true”/>

<h:button outcome=”main” includeViewParams=”true”>
 <f:param name=”itemId” value=”#{itemView.itemId}” />
</h:button>


Auto generated Bookmarkable URLs
Integrated with Navigation Rules
Project Stage
Runtime hint
Mostly for use of implementation and extensions
  Development, Production, SystemTest, UnitTest
<context-param>
 <param-name>javax.faces.PROJECT_STAGE</param-name>
 <param-value>Development</param-value>
</context-param>



Application.getProjectStage()
Behaviors
Attaching behaviors

<h:commandButton value=”Submit” onclick=”return confirm(‘Sure?’)”/>


<h:commandButton value=”Submit”>
 <custom:confirmation message=”Sure?” />
</h:commandButton>




One built-in client behavior, f:ajax
State Saving in JSF 1.x
Full Component Tree saved/restored
Attributes saved/restored
Performance/Memory issues
Burden for component developer
State Saving in JSF 2.0
Partial State Saving
Initial state is marked
Deltas are saved and helper
StateHelper API for developers
Much less in size
Resource Loading with JSF 1.x
Loading bundles resources from jar
Custom Servlet or Filter required
Resource Loading with JSF 2.0
New Resource APIs for;
  Registering
  Relocating
  Loading
locale, version support
New components
  <h:outputStylesheet /> and <h:outputScript />
Registering
   Resources located at;
      /webroot/resources/mylib
      /jar/META-INF/resources/mylib
  @ResourceDependency(name=”cool.js”, library=”mycoollib”)
public class MyCoolComponent extends UIComponent {
}



 @ResourceDependencies {
  @ResourceDependency(name=”cool.js”, library=”mycoollib”)
  @ResourceDependency(name=”cool.css”, library=”mycoollib”)
}
public class MyCoolComponent extends UIComponent {
}
Relocating
   Resources placed at head or body
      <h:head />, <h:body />
  @ResourceDependency(name=”cool.js”, library=”mycoollib”, target=”head”)
public class MyCoolComponent extends UIComponent {
}




   UIViewRoot.addComponentResource API
Resource Components
Load from webroot or jar
<h:outputStylesheet name=”cool.css” library=”mycoollib” />



<h:outputScript name=”cool.js” library=”mycoollib” target=”head”/>




<h:graphicImage name=”cool.png” library=”mycoollib”/>




<h:graphicImage value=”#{resource[‘mycoollib:cool.png’}”/>
Resources in CSS
#{resource} variable
.header {
  background:url(“#{resource[‘mylib:header.png’]}”);
}




Generates;
.header {
  background:url(“/myapp/javax.faces.resource/header.png?ln=mylib”);
}
Bean Validation
JSR-303 Integration
Reuse constraints
@NotNull
@Size(min=5, max=10)
private String title;


<h:inputText value=”#{bean.item.title}” />



                        instead of
<h:inputText value=”#{bean.item.title}” required=”true”>
 <f:validateLength min=”5” max=”10” />
</h:inputText/>
UI Components
Standard JSF Components (button, radio, checkbox)
Third Party Suites (e.g. PrimeFaces)



         But how to build
            your own?
Custom Components
             with JSF 1.x
5 different artifacts required

    faces-config.xml config
                                           jsp tld config
  <component /> <renderer/ >




   JSP Tag Class                              Component Class




                          Renderer Class
Custom Components
           with JSF 2.0
One .xhtml file is enough




                component.xhtml
DatePicker Demo
<prime:datePicker />
/webroot/resources/prime/datepicker.xhtml
/webroot/resources/jquery/...
PRIMEFACES
Next Generation Component Suite
Most Popular JSF 2.0 Library
100+ components (Everything you need)
Lightweight: one jar, no dependencies, zero-config
Skinning support with 25+ themes and theme creator
Extensive documentation
Huge and active community
jQuery based
Mobile UI Kit: TouchFaces
Ajax Push support
Open Source (Apache License)
Setup
No setup required, drop the jar and add the namespace;

     xmlns:p=”http://primefaces.prime.com.tr/ui”




    <p:editor />
PrimeFaces UI
PrimeFaces Ajax
Based on standard JSF 2.0 Ajax APIs
Extensions;
  p:ajax
  callbacks
  p:ajaxStatus
  jquery based client side api implementation
Callbacks
p:ajax                    f:ajax
onstart                  onevent

oncomplete               onerror

onsuccess
onerror
Callback Params
Pass data from server to client as JSON
Built-in callback param : “validationFailed”
     public void save() {
        Request context = RequestContext.getCurrentInstance();
        context.addCallbackParam(“saved”, true);
 }


     <p:commandButton value=”Submit” oncomplete=”handleComplete(xhr, status, args)”
            actionListener=”#{bean.save}”/>



     function handleComplete(xhr, status, args) {
       var saved = args.saved;
 }
Unobstrusive
JSF Page:   <p:schedule value=”#{bean.mode}” editable=”true”/>


            <div id=”_gen”></div>
            <script type=”text/javascript”>
Renders:      new PrimeFaces.widget.Schedule(‘_gen’, {editable:true});
            </script>




You get:
Progressive Enhancement
JSF Page:   <p:button value=”Submit” />


            <button id=”gen”>Submit</button>
            <script type=”text/javascript”>
Renders:      new PrimeFaces.widget.Button(‘_gen’);
            </script>




You get:
Themes
Integrated with ThemeRoller
25+ Built-in Themes
Online ThemeCreator to create your own easily
Theme Gallery
How to Create Your Own
No need to know CSS
Disable default skin

<context-param>
  <param-name>primefaces.skin</param-name>
  <param-value>none</param-value>
</context-param>



See: http://vimeo.com/14235640
PrimeFaces Demo
Ajax Push
Powered by Atmosphere Framework
Currently Proof-of-Concept (http-streaming)
Future;
  WebSockets, Long-Polling, Http-Streaming
TouchFaces
Mobile UI components
Optimized for webkit (eg IPhone, Android)
Native looking webapps
jqtouch based
TouchFaces Demo



Translate             Chat - Ajax Push      PathFinder - GPS          TwitFaces




            Weather                      Notes                 News
Integration
Spring Core
Spring WebFlow
Seam
CDI
Portlets
IDE Support
Documentation
400+ pages (for now)
Component reference, examples, tips
Community Support
Huge community, 500 posts every week
Enterprise Support
Fast reponse times
Priority forum access
Custom component development



      http://www.primefaces.org/support.html
2.2 Trailer
Trainings
Prime Technology Courses (onsite and online);
  JSF2 and PrimeFaces
  JSF2 - Spring - JPA (popular)
  JSF - Seam - JPA
  JSF2 - CDI- JPA (Java EE 6)
  and more

         www.prime.com.tr/training.html
Finale
http://www.primefaces.org
cagatay.civici@prime.com.tr
optimus.prime in PrimeFaces Forum

Contenu connexe

Tendances

All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...Caelum
 
AtlasCamp 2015: Using add-ons to build add-ons
AtlasCamp 2015: Using add-ons to build add-onsAtlasCamp 2015: Using add-ons to build add-ons
AtlasCamp 2015: Using add-ons to build add-onsAtlassian
 
AtlasCamp 2013: Modernizing your Plugin UI
AtlasCamp 2013: Modernizing your Plugin UI AtlasCamp 2013: Modernizing your Plugin UI
AtlasCamp 2013: Modernizing your Plugin UI colleenfry
 
JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)Roger Kitain
 
AtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlassian
 
AtlasCamp 2010: Understanding the Atlassian Platform - Tim Pettersen
AtlasCamp 2010: Understanding the Atlassian Platform - Tim PettersenAtlasCamp 2010: Understanding the Atlassian Platform - Tim Pettersen
AtlasCamp 2010: Understanding the Atlassian Platform - Tim PettersenAtlassian
 
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Arun Gupta
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular UJoonas Lehtinen
 
AtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlassian
 
BPM-2 Introduction to Advanced Workflows
BPM-2 Introduction to Advanced WorkflowsBPM-2 Introduction to Advanced Workflows
BPM-2 Introduction to Advanced WorkflowsAlfresco Software
 
BPM-1 Introduction to Advanced Workflows
BPM-1 Introduction to Advanced WorkflowsBPM-1 Introduction to Advanced Workflows
BPM-1 Introduction to Advanced WorkflowsAlfresco Software
 
BPM-3 Advanced Workflow Deep Dive
BPM-3 Advanced Workflow Deep DiveBPM-3 Advanced Workflow Deep Dive
BPM-3 Advanced Workflow Deep DiveAlfresco Software
 
Go Fullstack: JSF for Public Sites (CONFESS 2013)
Go Fullstack: JSF for Public Sites (CONFESS 2013)Go Fullstack: JSF for Public Sites (CONFESS 2013)
Go Fullstack: JSF for Public Sites (CONFESS 2013)Michael Kurz
 
Vaadin Introduction, 7.3 edition
Vaadin Introduction, 7.3 editionVaadin Introduction, 7.3 edition
Vaadin Introduction, 7.3 editionJoonas Lehtinen
 
E2 appspresso hands on lab
E2 appspresso hands on labE2 appspresso hands on lab
E2 appspresso hands on labNAVER D2
 
Go Fullstack: JSF for Public Sites (CONFESS 2012)
Go Fullstack: JSF for Public Sites (CONFESS 2012)Go Fullstack: JSF for Public Sites (CONFESS 2012)
Go Fullstack: JSF for Public Sites (CONFESS 2012)Michael Kurz
 

Tendances (19)

All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...
 
AtlasCamp 2015: Using add-ons to build add-ons
AtlasCamp 2015: Using add-ons to build add-onsAtlasCamp 2015: Using add-ons to build add-ons
AtlasCamp 2015: Using add-ons to build add-ons
 
AtlasCamp 2013: Modernizing your Plugin UI
AtlasCamp 2013: Modernizing your Plugin UI AtlasCamp 2013: Modernizing your Plugin UI
AtlasCamp 2013: Modernizing your Plugin UI
 
JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)
 
AtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and Server
 
AtlasCamp 2010: Understanding the Atlassian Platform - Tim Pettersen
AtlasCamp 2010: Understanding the Atlassian Platform - Tim PettersenAtlasCamp 2010: Understanding the Atlassian Platform - Tim Pettersen
AtlasCamp 2010: Understanding the Atlassian Platform - Tim Pettersen
 
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular U
 
Vaadin Components
Vaadin ComponentsVaadin Components
Vaadin Components
 
AtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using now
 
BPM-2 Introduction to Advanced Workflows
BPM-2 Introduction to Advanced WorkflowsBPM-2 Introduction to Advanced Workflows
BPM-2 Introduction to Advanced Workflows
 
BPM-1 Introduction to Advanced Workflows
BPM-1 Introduction to Advanced WorkflowsBPM-1 Introduction to Advanced Workflows
BPM-1 Introduction to Advanced Workflows
 
BPM-3 Advanced Workflow Deep Dive
BPM-3 Advanced Workflow Deep DiveBPM-3 Advanced Workflow Deep Dive
BPM-3 Advanced Workflow Deep Dive
 
Angular js
Angular jsAngular js
Angular js
 
Jsfandsecurity
JsfandsecurityJsfandsecurity
Jsfandsecurity
 
Go Fullstack: JSF for Public Sites (CONFESS 2013)
Go Fullstack: JSF for Public Sites (CONFESS 2013)Go Fullstack: JSF for Public Sites (CONFESS 2013)
Go Fullstack: JSF for Public Sites (CONFESS 2013)
 
Vaadin Introduction, 7.3 edition
Vaadin Introduction, 7.3 editionVaadin Introduction, 7.3 edition
Vaadin Introduction, 7.3 edition
 
E2 appspresso hands on lab
E2 appspresso hands on labE2 appspresso hands on lab
E2 appspresso hands on lab
 
Go Fullstack: JSF for Public Sites (CONFESS 2012)
Go Fullstack: JSF for Public Sites (CONFESS 2012)Go Fullstack: JSF for Public Sites (CONFESS 2012)
Go Fullstack: JSF for Public Sites (CONFESS 2012)
 

Similaire à In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Java EE7 Demystified
Java EE7 DemystifiedJava EE7 Demystified
Java EE7 DemystifiedAnkara JUG
 
What You Need To Build Cool Enterprise Applications With JSF
What You Need To Build Cool Enterprise Applications With JSFWhat You Need To Build Cool Enterprise Applications With JSF
What You Need To Build Cool Enterprise Applications With JSFMax Katz
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJini Lee
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Red Hat Developers
 
RichFaces 4: Rich Ajax Components For Your JSF Applications
RichFaces 4: Rich Ajax Components For Your JSF ApplicationsRichFaces 4: Rich Ajax Components For Your JSF Applications
RichFaces 4: Rich Ajax Components For Your JSF ApplicationsMax Katz
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootJosué Neis
 
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
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Fahad Golra
 
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
 
Introduction to jsf2
Introduction to jsf2Introduction to jsf2
Introduction to jsf2Rajiv Gupta
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkara JUG
 
JSF and Seam
JSF and SeamJSF and Seam
JSF and Seamyuvalb
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortalJennifer Bourey
 
Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS
Ajax Applications with JSF 2 and New RichFaces 4 - TSSJSAjax Applications with JSF 2 and New RichFaces 4 - TSSJS
Ajax Applications with JSF 2 and New RichFaces 4 - TSSJSMax Katz
 

Similaire à In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces (20)

JSF 2.0 Preview
JSF 2.0 PreviewJSF 2.0 Preview
JSF 2.0 Preview
 
Java EE7 Demystified
Java EE7 DemystifiedJava EE7 Demystified
Java EE7 Demystified
 
What You Need To Build Cool Enterprise Applications With JSF
What You Need To Build Cool Enterprise Applications With JSFWhat You Need To Build Cool Enterprise Applications With JSF
What You Need To Build Cool Enterprise Applications With JSF
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
 
Jsf
JsfJsf
Jsf
 
Jsf presentation
Jsf presentationJsf presentation
Jsf presentation
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
 
JBoss AS7 OSDC 2011
JBoss AS7 OSDC 2011JBoss AS7 OSDC 2011
JBoss AS7 OSDC 2011
 
RichFaces 4: Rich Ajax Components For Your JSF Applications
RichFaces 4: Rich Ajax Components For Your JSF ApplicationsRichFaces 4: Rich Ajax Components For Your JSF Applications
RichFaces 4: Rich Ajax Components For Your JSF Applications
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
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
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
 
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
 
Introduction to jsf2
Introduction to jsf2Introduction to jsf2
Introduction to jsf2
 
AnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFacesAnkaraJUG Kasım 2012 - PrimeFaces
AnkaraJUG Kasım 2012 - PrimeFaces
 
JSF and Seam
JSF and SeamJSF and Seam
JSF and Seam
 
Rich Portlet Development in uPortal
Rich Portlet Development in uPortalRich Portlet Development in uPortal
Rich Portlet Development in uPortal
 
Jsfsunum
JsfsunumJsfsunum
Jsfsunum
 
Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS
Ajax Applications with JSF 2 and New RichFaces 4 - TSSJSAjax Applications with JSF 2 and New RichFaces 4 - TSSJS
Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS
 
Jsfsunum
JsfsunumJsfsunum
Jsfsunum
 

Plus de Skills Matter

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard LawrenceSkills Matter
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applicationsSkills Matter
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmSkills Matter
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimSkills Matter
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Skills Matter
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlSkills Matter
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsSkills Matter
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Skills Matter
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Skills Matter
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldSkills Matter
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Skills Matter
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Skills Matter
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingSkills Matter
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveSkills Matter
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSkills Matter
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tSkills Matter
 

Plus de Skills Matter (20)

5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence5 things cucumber is bad at by Richard Lawrence
5 things cucumber is bad at by Richard Lawrence
 
Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvmScala e xchange 2013 haoyi li on metascala a tiny diy jvm
Scala e xchange 2013 haoyi li on metascala a tiny diy jvm
 
Oscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheimOscar reiken jr on our success at manheim
Oscar reiken jr on our success at manheim
 
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
Progressive f# tutorials nyc dmitry mozorov & jack pappas on code quotations ...
 
Cukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberlCukeup nyc ian dees on elixir, erlang, and cucumberl
Cukeup nyc ian dees on elixir, erlang, and cucumberl
 
Cukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.jsCukeup nyc peter bell on getting started with cucumber.js
Cukeup nyc peter bell on getting started with cucumber.js
 
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
Agile testing & bdd e xchange nyc 2013 jeffrey davidson & lav pathak & sam ho...
 
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
Progressive f# tutorials nyc rachel reese & phil trelford on try f# from zero...
 
Progressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source worldProgressive f# tutorials nyc don syme on keynote f# in the open source world
Progressive f# tutorials nyc don syme on keynote f# in the open source world
 
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
Agile testing & bdd e xchange nyc 2013 gojko adzic on bond villain guide to s...
 
Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#Dmitry mozorov on code quotations code as-data for f#
Dmitry mozorov on code quotations code as-data for f#
 
A poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testingA poet's guide_to_acceptance_testing
A poet's guide_to_acceptance_testing
 
Russ miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-diveRuss miles-cloudfoundry-deep-dive
Russ miles-cloudfoundry-deep-dive
 
Serendipity-neo4j
Serendipity-neo4jSerendipity-neo4j
Serendipity-neo4j
 
Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Plug 20110217
Plug   20110217Plug   20110217
Plug 20110217
 
Lug presentation
Lug presentationLug presentation
Lug presentation
 
I went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_tI went to_a_communications_workshop_and_they_t
I went to_a_communications_workshop_and_they_t
 
Plug saiku
Plug   saikuPlug   saiku
Plug saiku
 

Dernier

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 

Dernier (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 

In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

  • 1. EXPLORING JSF 2.0 AND PRIMEFACES Cagatay Civici PRIME TECHNOLOGY
  • 2. Cagatay Civici JSF EG (Expert Group) Member PrimeFaces Lead Apache MyFaces PMC Speaker, Author, Reviewer Consultant and Trainer for Prime Technology
  • 3. Topics JSF Overview What’s New in JSF 2.0? Go beyond with PrimeFaces
  • 4. JSF Overview Standard for Java EE Component Oriented Event Driven RenderKits (web, mobile ...)
  • 5. History JSR 127 - JSF 1 JSR 252 - JSF 1.2 JSR-314 - JSF 2.0 <- Coolest one
  • 6. JSF Ecosytem Apache Software Foundation (MyFaces, Trinidad, Tobago, Tomahawk, ExtVal...) Oracle (ADF Faces - Mojarra Implementation) IBM (IBM JSF Component) Prime Technology (PrimeFaces) VMware/SpringSource (Spring WebFlow) RedHat/JBoss (Seam, RichFaces) JAVA EE 6 (CDI, Bean Validation) Other *Faces libs
  • 7. JSF 2.0 Highlights Powered by Community Feedback Facelets/VDL • Navigations AJAX • Resource Loading • Bookmarking Custom Components • New Event API Behaviors • Exception Handling Partial State • JSR-303 Bean Validation and general pain relief
  • 8. JSP with JSF Mismatch JSP tags create JSF components Content vs Component Two different lifecycles
  • 9. Facelets / VDL XHTML based Optimized for JSF Templating New View Declaration Language API NOW STANDARD!
  • 10. AJAX and JSF 1.x Good match (Partial Output) Wheel reinvented by; IceFaces PrimeFaces Trinidad Tomahawk RichFaces OpenFaces ADF Faces *Faces Compatibility issues
  • 11. AJAX and JSF 2.0 Now Standard! New APIs; Server: PartialViewContext Client: jsf.ajax.AjaxRequest New tag; <f:ajax />
  • 12. AJAX and JSF 2.0 PartialViewContext API Partial Processing (execute) Partial Rendering (render) Standard request parameters
  • 13. f:ajax Ajax Behavior <h:inputText value=”#{bean.value}”> <f:ajax render=”display”/> </h:inputText> <h:outputText id=”display” /> <h:inputText value=”#{bean.value}”> <f:ajax render=”display” execute=”@this”/> </h:inputText> <h:outputText id=”display” /> <h:inputText value=”#{bean.value}”> <f:ajax render=”display” execute=”@this” event=”blur”/> </h:inputText> <h:outputText id=”display” />
  • 14. No XML faces-config.xml is not optional Get rid of; <managed-bean /> <navigaton-case /> <component />, <renderer /> <converter />, <validator /> ...
  • 15. Managed Beans with JSF 1.x <managed-bean> <managed-bean-name>itemView</managed-bean-name> <managed-bean-class>com.prime.view.itemView</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> package com.prime.view; public class ItemView { }
  • 16. Managed Beans with JSF 2.0 NO XML @ManagedBean public class ItemView { }
  • 17. Dependencies with JSF 1.x <managed-bean> <managed-bean-name>itemView</managed-bean-name> <managed-bean-class>com.prime.view.itemView</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>itemService</property-name> <value>#{itemService}</value> </managed-property> </managed-bean> <managed-bean> <managed-bean-name>itemService</managed-bean-name> <managed-bean-class>com.prime.service.ItemServiceImpl</managed-bean-class> <managed-bean-scope>application</managed-bean-scope> </managed-bean> package com.prime.view; public class ItemView { private ItemService itemService; //getter&setter }
  • 18. Dependencies with JSF 2.0 NO XML @ManagedBean(name=”itemService”) @ApplicationScoped public class ItemServiceImpl implements ItemService { } @ManagedBean public class ItemView { @ManagedProperty(value=”itemService”) private ItemService itemService; //getter&setter }
  • 20. View Scope Between request and session Lives for postbacks #{viewScope} UIViewRoot.getViewMap()
  • 21. Flash Scope ROR concept Lives in subsequent request Survives redirect Post-Redirect-Get #{flash} ExternalContext.getFlash()
  • 22. System Events Phaselisteners are not enough Subscribe to various events in lifecycle Application Events Component Events
  • 23. Application Events Application wide events ExceptionQueuedEvent PostConstructApplicationEvent PreDestroyApplicationEvent more...
  • 24. Component Events View based events PostAddToViewEvent PreValidateEvent PreRenderViewEvent more... <h:inputText value=”#{bean.value}”> <f:event type=”preValidate” listener=”#{bean.preValidate}” /> </h:inputText>
  • 25. Event Listeners New API SystemEventListener isListenerForSource(Object source) processEvent(SystemEvent event) Configure via xml or @ListenerFor Application.subscribeToEvent(event, listener); UIComponent.subscribeToEvent(event, listener);
  • 27. Navigations with JSF 1.x <navigation-rule> <from-view-id>/source.xhtml</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>target.xhtml</to-view-id> </navigation-case> </navigation-rule> public String buttonClick() { return “success”; } source.xhtml target.xhtml
  • 28. Navigations with JSF 2.0 NO XML public String buttonClick() { return “target”; } source.xhtml target.xhtml
  • 29. GET Support Navigate by GET View Metadata and View Parameters Bookmarkable URLs Post-Redirect-Get
  • 30. GET Support with JSF 1.x Assigned when bean is used for first time No validation/conversion support No post assignment listener (init view) http://www.site.com/itemView.jsf?itemId=10 <managed-bean> <managed-bean-name>itemView</managed-bean-name> <managed-bean-class>com.prime.view.itemView</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> <managed-property> <property-name>itemId</property-name> <value>#{param[‘itemId’]}</value> </managed-property> </managed-bean>
  • 31. GET Support with JSF 2.0 Introducing ViewParameters Validation/conversion support Post assignment listener (init view) http://www.site.com/itemView.jsf?itemId=10 <f:view> <f:metadata> <f:viewParam name=”itemId” value=”#{itemView.itemId}” /> </f:metadata> </f:view>
  • 32. GET Support with JSF 2.0 Validation/conversion support <f:view> <f:metadata> <f:viewParam name=”itemId” value=”#{itemView.itemId}”> <f:validator validatorId=”itemValidator” /> </f:viewParam> </f:metadata> </f:view>
  • 33. GET Support with JSF 2.0 Post mapping listener <f:view> <f:metadata> <f:viewParam name=”itemId” value=”#{itemView.itemId}”> <f:validator validatorId=”itemValidator” /> </f:viewParam> <f:event type=”preRenderView” listener=”#{itemView.loadItem}”/> </f:metadata> </f:view> public void loadItem() { //load item with itemId from datatabase }
  • 34. GET Support with JSF 1.2 GET component h:outputLink <h:outputLink value=”#{request.contextPath}”/itemView.jsf?itemId=10> View Item </h:outputLink> Manual URL generation No support for; context-path navigation-rules
  • 35. GET Support with JSF 2.0 <h:button /> and <h:link /> <h:link outcome=”main” /> <h:button outcome=”main” includeViewParams=”true”/> <h:button outcome=”main” includeViewParams=”true”> <f:param name=”itemId” value=”#{itemView.itemId}” /> </h:button> Auto generated Bookmarkable URLs Integrated with Navigation Rules
  • 36. Project Stage Runtime hint Mostly for use of implementation and extensions Development, Production, SystemTest, UnitTest <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> Application.getProjectStage()
  • 37. Behaviors Attaching behaviors <h:commandButton value=”Submit” onclick=”return confirm(‘Sure?’)”/> <h:commandButton value=”Submit”> <custom:confirmation message=”Sure?” /> </h:commandButton> One built-in client behavior, f:ajax
  • 38. State Saving in JSF 1.x Full Component Tree saved/restored Attributes saved/restored Performance/Memory issues Burden for component developer
  • 39. State Saving in JSF 2.0 Partial State Saving Initial state is marked Deltas are saved and helper StateHelper API for developers Much less in size
  • 40. Resource Loading with JSF 1.x Loading bundles resources from jar Custom Servlet or Filter required
  • 41. Resource Loading with JSF 2.0 New Resource APIs for; Registering Relocating Loading locale, version support New components <h:outputStylesheet /> and <h:outputScript />
  • 42. Registering Resources located at; /webroot/resources/mylib /jar/META-INF/resources/mylib @ResourceDependency(name=”cool.js”, library=”mycoollib”) public class MyCoolComponent extends UIComponent { } @ResourceDependencies { @ResourceDependency(name=”cool.js”, library=”mycoollib”) @ResourceDependency(name=”cool.css”, library=”mycoollib”) } public class MyCoolComponent extends UIComponent { }
  • 43. Relocating Resources placed at head or body <h:head />, <h:body /> @ResourceDependency(name=”cool.js”, library=”mycoollib”, target=”head”) public class MyCoolComponent extends UIComponent { } UIViewRoot.addComponentResource API
  • 44. Resource Components Load from webroot or jar <h:outputStylesheet name=”cool.css” library=”mycoollib” /> <h:outputScript name=”cool.js” library=”mycoollib” target=”head”/> <h:graphicImage name=”cool.png” library=”mycoollib”/> <h:graphicImage value=”#{resource[‘mycoollib:cool.png’}”/>
  • 45. Resources in CSS #{resource} variable .header { background:url(“#{resource[‘mylib:header.png’]}”); } Generates; .header { background:url(“/myapp/javax.faces.resource/header.png?ln=mylib”); }
  • 46. Bean Validation JSR-303 Integration Reuse constraints @NotNull @Size(min=5, max=10) private String title; <h:inputText value=”#{bean.item.title}” /> instead of <h:inputText value=”#{bean.item.title}” required=”true”> <f:validateLength min=”5” max=”10” /> </h:inputText/>
  • 47. UI Components Standard JSF Components (button, radio, checkbox) Third Party Suites (e.g. PrimeFaces) But how to build your own?
  • 48. Custom Components with JSF 1.x 5 different artifacts required faces-config.xml config jsp tld config <component /> <renderer/ > JSP Tag Class Component Class Renderer Class
  • 49. Custom Components with JSF 2.0 One .xhtml file is enough component.xhtml
  • 51. PRIMEFACES Next Generation Component Suite Most Popular JSF 2.0 Library 100+ components (Everything you need) Lightweight: one jar, no dependencies, zero-config Skinning support with 25+ themes and theme creator Extensive documentation Huge and active community jQuery based Mobile UI Kit: TouchFaces Ajax Push support Open Source (Apache License)
  • 52. Setup No setup required, drop the jar and add the namespace; xmlns:p=”http://primefaces.prime.com.tr/ui” <p:editor />
  • 54. PrimeFaces Ajax Based on standard JSF 2.0 Ajax APIs Extensions; p:ajax callbacks p:ajaxStatus jquery based client side api implementation
  • 55. Callbacks p:ajax f:ajax onstart onevent oncomplete onerror onsuccess onerror
  • 56. Callback Params Pass data from server to client as JSON Built-in callback param : “validationFailed” public void save() { Request context = RequestContext.getCurrentInstance(); context.addCallbackParam(“saved”, true); } <p:commandButton value=”Submit” oncomplete=”handleComplete(xhr, status, args)” actionListener=”#{bean.save}”/> function handleComplete(xhr, status, args) { var saved = args.saved; }
  • 57. Unobstrusive JSF Page: <p:schedule value=”#{bean.mode}” editable=”true”/> <div id=”_gen”></div> <script type=”text/javascript”> Renders: new PrimeFaces.widget.Schedule(‘_gen’, {editable:true}); </script> You get:
  • 58. Progressive Enhancement JSF Page: <p:button value=”Submit” /> <button id=”gen”>Submit</button> <script type=”text/javascript”> Renders: new PrimeFaces.widget.Button(‘_gen’); </script> You get:
  • 59. Themes Integrated with ThemeRoller 25+ Built-in Themes Online ThemeCreator to create your own easily
  • 61. How to Create Your Own No need to know CSS Disable default skin <context-param> <param-name>primefaces.skin</param-name> <param-value>none</param-value> </context-param> See: http://vimeo.com/14235640
  • 63. Ajax Push Powered by Atmosphere Framework Currently Proof-of-Concept (http-streaming) Future; WebSockets, Long-Polling, Http-Streaming
  • 64. TouchFaces Mobile UI components Optimized for webkit (eg IPhone, Android) Native looking webapps jqtouch based
  • 65. TouchFaces Demo Translate Chat - Ajax Push PathFinder - GPS TwitFaces Weather Notes News
  • 68. Documentation 400+ pages (for now) Component reference, examples, tips
  • 69. Community Support Huge community, 500 posts every week
  • 70. Enterprise Support Fast reponse times Priority forum access Custom component development http://www.primefaces.org/support.html
  • 72. Trainings Prime Technology Courses (onsite and online); JSF2 and PrimeFaces JSF2 - Spring - JPA (popular) JSF - Seam - JPA JSF2 - CDI- JPA (Java EE 6) and more www.prime.com.tr/training.html