Rriad Dev Prime Faces Jsfsummit09-1

download Rriad Dev Prime Faces Jsfsummit09-1

of 61

Transcript of Rriad Dev Prime Faces Jsfsummit09-1

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    1/61

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    2/61

    Cagatay Civici

    Apache MyFaces PMC

    PrimeFaces Founder and Lead

    Atmosphere (Comet) Committer

    Author&Technical Reviewer

    Regular speaker (JSFSummit, JSFDays) Consultant, Instructor, Mentor

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    3/61

    What IS THIS ALL ABOUT?

    Web Application Development with JSF

    PrimeFaces

    AJAX Ajax Push/Reverse Ajax/Comet

    RIA

    Mobile Devices, IPhone, Android ...

    Google Guice and JPA

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    4/61

    JSF

    Standard (JSR)

    Component Oriented

    Latest JSF 2.0

    Vendor support

    Tools Extension Frameworks

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    5/61

    Open Source Component Suite

    Mobile Extensions

    Ajax Push/Comet Compatible&Lightweight

    PrimeFaces-Ext (Optimus&FacesTrace)

    Overview

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    6/61

    History

    Started November 2008

    1 year old

    Monthly releases

    Current

    1.0.0.RC for JSF 1.2 2.0.0.RC for JSF 2.0

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    7/61

    UI Components

    70+ Rich set of components

    Built-in Ajax

    Partial Page Rendering

    Ajax Push/Comet YUI and JQuery

    TouchFaces - Mobile UI Kit

    Simple Design Lightweight

    Compatible with others

    Unobstrusive Javascript

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    8/61

    Advanced UI - Mock OS X

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    9/61

    Simple setup

    Resource Servlet

    Namespace

    p:resources

    Lets Rock

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    10/61

    Resource Servlet

    ! Resource Servlet! ! ! org.primefaces.resource.ResourceServlet! ! 1

    ! Resource Servlet! /primefaces_resource/*

    Streaming and Caching (js, css, images)

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    11/61

    p:resources

    Renders ,

    No hacks to

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    12/61

    Try IT

    !

    !

    http://primefaces.prime.com.tr/uihttp://primefaces.prime.com.tr/uihttp://www.w3.org/1999/xhtmlhttp://www.w3.org/1999/xhtml
  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    13/61

    EASY ajax

    Ajax without javascript

    Partial Page Rendering

    Flexible (callbacks)

    Ajax components

    No different than regular process

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    14/61

    PPR - Hello world

    public class GreetingBean {

    private String name;

    //getters&setters

    }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    15/61

    Declarative ajax

    public class GreetingBean {private String name;

    //getters&setters

    }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    16/61

    Ajax Status

    Declarative

    Programmatic

    ! ! ! ! ! ! ! ! ! ! ! ! ! !! ! ! ! ! ! !

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    17/61

    Ajax validations

    Server validates, Client presents

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    18/61

    p:ajax

    Generic ajax component

    Ajaxify standard components

    Attach to dom events (eg blur)

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    19/61

    Ajax remoting

    Execute java methods

    public class GreetingBean {

    ...

    public void uppercase(ActionEvent event) {name = name.toUpperCase();

    }

    }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    20/61

    PPR Summary

    Simple

    Easy to Use

    Flexible

    Responsive

    Fast

    Ajax ViewHandler

    Ajax StateManager

    Ajax Servlet Filter

    Ajax ViewRoot

    DOM Tree Copy on Server

    Partial Triggers

    HTML Parser

    Ajax Context

    PPRPanel Ajax Regions

    No need for ...

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    21/61

    PPR Demo

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    22/61

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    23/61

    Component SUITE Demo

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    24/61

    Ajax Push/Comet

    Http-Streaming or Long-Polling

    Built on top of Atmosphere

    CometContext.publish(...);

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    25/61

    Techniques

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    26/61

    Atmosphere

    Portable Comet Framework

    Write once, deploy anywhere

    Even easier than Servlet 3.0

    Reference JSF Integration: PrimeFaces

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    27/61

    Chat App in 1Minute

    function handlePublish(data) {! $('#display').append(data);}

    public class ChatController {

    private String message;

    public void send(ActionEvent event) {

    CometContext.publish(message);

    }

    //getters setters

    }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    28/61

    TouchFaces

    Mobile UI Kit

    WebKit browsers

    IPhone, Android, Palm...

    Native IPhone UI

    Integrated Ajax Regular JSF

    PathFinder

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    29/61

    TouchFaces UI

    Special Components

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    30/61

    TouchFaces in ACtion

    Translate Chat - Ajax Push PathFinder - GPS TwitFaces

    Weather Notes News

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    31/61

    TouchFaces DEMO

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    32/61

    Comparison with Others

    Lighter

    Simpler

    Compatible

    Ease of Use

    From app developers to app developers

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    33/61

    Optimus

    Non-UI

    Dump JSF Managed Beans

    Google Guice Integration

    JPA support

    Orchestrates JSF-Guice-JPA

    AOP, Security, Navigation extensions

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    34/61

    Google GUICE

    Guice aware JSF backing beans

    @Controller

    No xml

    AOP support

    Constructor, Setter, Field injection

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    35/61

    Optimus Controllers

    package com.mycompany.project;

    @Controller(name=greetingBean, scope=Scope.REQUEST)

    public class GreetingBean {

    private String name;

    //getters&setters

    }

    faces-config.xml

    GreetingBean.java

    greeting.xhtml

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    36/61

    Dependency Injection

    public interface GreetingService {

    public void sayHi(String name);

    }

    public class GreetingServiceConsole implements GreetingService {

    public void sayHi(String name) {

    System.out.println(Hello + name);

    }

    }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    37/61

    Optimus Injection

    @Controller(name=greetingBean, scope=Scope.REQUEST)

    public class GreetingBean {

    @Inject

    private GreetingService greetingService;

    }

    faces-config.xml

    GreetingBean.java

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    38/61

    @Inject

    Setter Injection

    Constructor Injection

    Field Injection

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    39/61

    Setter Injection

    @Controller(name=greetingBean, scope=Scope.REQUEST)

    public class GreetingBean {

    private GreetingService greetingService;

    @Injectpublic void setGreetingService(GreetingService greetingService) {

    this.greetingService = greetingService;

    }

    public GreetingService getGreetingService() {

    return greetingService;

    }...

    }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    40/61

    Construction injection

    @Controller(name=greetingBean, scope=Scope.REQUEST)

    public class GreetingBean {

    private GreetingService greetingService;

    @Injectpublic void GreetingBean(GreetingService greetingService) {

    this.greetingService = greetingService;

    }

    ...

    }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    41/61

    Field injection

    @Controller(name=greetingBean, scope=Scope.Request)

    public class GreetingBean {

    @Inject

    private GreetingService greetingService;

    ...

    }

    Warning: Bad practice for testing :)

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    42/61

    ViewSCOPE

    Between request and session scope

    @Controller(name=greetingBean, scope=Scope.VIEW)

    public class GreetingBean {

    ...}

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    43/61

    Context Helpers

    Abstracts coding against FacesContext

    Use interfaces

    Testable, no npe in testing

    FacesMessages

    Params

    Session

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    44/61

    Regular Waypublic class GreetingBean {

    ! public String loginClicked() {! ! boolean isValidUser = loginService.login(username, password);! ! if(isValidUser) {! ! ! return "mainpage";! ! } else {! ! ! //Evil code that makes your backing bean untestable! ! ! FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,"Invalid login", "Wrong username/password combination");

    ! ! ! FacesContext.getCurrentInstance().add(null, message);! ! ! //End of evil code! ! ! return "failed";! ! }! }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    45/61

    Testable way@Controller(name=greetingBean, scope=Scope.VIEW)

    public class GreetingBean {

    @Inject

    private FacesMessages messages;

    ! public String loginClicked() {! ! boolean isValidUser = loginService.login(username, password);! ! if(isValidUser) {! ! ! return "mainpage";! ! } else {! ! ! messages.addError("Invalid login", "Wrong username/password combination");

    return "failed";

    ! ! }! }}

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    46/61

    Security Extensions

    AuthContext

    Page Level

    Method Level

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    47/61

    Page Security

    EL extensions

    #{authContext.username}

    ifGranted, ifAllGranted, ifAnyGranted,

    ifNonGranted

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    48/61

    Method Securitypublic class ItemController {

    public void deleteItem(ActionEvent event) {

    if(Utils.isUserInRole(admin,editor))

    throw new SecurityException();

    else

    //delete item

    }

    }

    @Controller(name=greetingBean, scope=Scope.VIEW)

    public class ItemController {

    @Authorize(admin,editor)

    public void deleteItem(ActionEvent event) {

    //delete item

    }}

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    49/61

    JPA Support

    Warp-Persist Integration

    public class GreetingServiceJPA implements GreetingService {

    @Injectprivate Provider em;

    @Transactional

    public void sayHi(String name) {

    em.get().persist(...);}

    }

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    50/61

    Implicit navigations

    No more XML

    Convention over Configuration

    Inspired JSF 2.0 navigations

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    51/61

    Optimus Navigations

    userDetail

    faces-config.xml

    userList.xhtml userDetail.xhtml

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    52/61

    FAcesTrace

    Trace Debug tool

    Lifecycle visualizer

    Performance tracker

    DHTML Component Tree

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    53/61

    FacesTrace demo

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    54/61

    Integrate with

    Seam, Spring, Guice ...

    Examples

    BookStore (PF-Optimus-Guice-JPA)

    PhoneBook (PF-Seam-JPA)

    MovieCollector (PF-Spring-JPA)

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    55/61

    Documentation

    Reference Documentation (300 pages)

    Wiki

    Screencasts

    API&TLD Docs

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    56/61

    Support

    http://primefaces.prime.com.tr/forum Very active (20 posts per day, 3000+ members)

    http://primefaces.prime.com.tr/forumhttp://primefaces.prime.com.tr/forum
  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    57/61

    Enterprise Support

    2/4 hour average response time

    Priority forum

    Ticket based support portal

    IM support over skype

    JSF specific help

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    58/61

    Whats next

    More UI Components targeting 100+

    IDE Support (PrimeIDE)

    Pushing the limits of JSF

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    59/61

    Upcoming UI

    Organizer (iCal, Outlook)

    TreeTable

    Context Menu

    Gesture

    ProgressBar ...more

  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    60/61

    Finale

    [email protected]

    Twitter: @cagataycivici, @primefaces

    http://cagataycivici.wordpress.com

    http://primefaces.prime.com.tr

    https://atmosphere.dev.java.net/

    http://primefaces.prime.com.tr/http://cagataycivici.wordpress.com/http://primefaces.prime.com.tr/http://primefaces.prime.com.tr/http://primefaces.prime.com.tr/http://primefaces.prime.com.tr/http://cagataycivici.wordpress.com/http://cagataycivici.wordpress.com/mailto:[email protected]:[email protected]
  • 8/6/2019 Rriad Dev Prime Faces Jsfsummit09-1

    61/61

    Questions

    and hopefully answers