exploring js f 2 and prime faces

73
EXPLORING JSF 2.0 AND PRIMEFACES Cagatay Civici PRIME TECHNOLOGY

Upload: spacer29

Post on 24-Oct-2015

30 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Exploring Js f 2 and Prime Faces

EXPLORING JSF 2.0AND

PRIMEFACES

Cagatay Civici

PRIMETECHNOLOGY

Page 2: Exploring Js f 2 and Prime Faces

Cagatay Civici

JSF EG (Expert Group) Member

PrimeFaces Lead

Apache MyFaces PMC

Speaker, Author, Reviewer

Consultant and Trainer for Prime Technology

Page 3: Exploring Js f 2 and Prime Faces

Topics

JSF Overview

What’s New in JSF 2.0?

Go beyond with PrimeFaces

Page 4: Exploring Js f 2 and Prime Faces

JSF Overview

Standard for Java EE

Component Oriented

Event Driven

RenderKits (web, mobile ...)

Page 5: Exploring Js f 2 and Prime Faces

History

JSR 127 - JSF 1

JSR 252 - JSF 1.2

JSR-314 - JSF 2.0 <- Coolest one

Page 6: Exploring Js f 2 and Prime Faces

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

Page 7: Exploring Js f 2 and Prime Faces

JSF 2.0 Highlights

Facelets/VDL

AJAX

Custom Components

Behaviors

Partial State

• Navigations• Resource Loading• Bookmarking• New Event API• Exception Handling• JSR-303 Bean Validation

and general pain relief

Powered by Community Feedback

Page 8: Exploring Js f 2 and Prime Faces

JSP with JSF

Mismatch

JSP tags create JSF components

Content vs Component

Two different lifecycles

Page 9: Exploring Js f 2 and Prime Faces

Facelets / VDL

XHTML based

Optimized for JSF

Templating

New View Declaration Language API

NOW STANDARD!

Page 10: Exploring Js f 2 and Prime Faces

AJAX and JSF 1.x

Good match (Partial Output)

Wheel reinvented by;

Compatibility issues

PrimeFaces

RichFaces

IceFaces

OpenFaces

Trinidad

ADF Faces *Faces

Tomahawk

Page 11: Exploring Js f 2 and Prime Faces

AJAX and JSF 2.0

Now Standard!

New APIs;

Server: PartialViewContext

Client: jsf.ajax.AjaxRequest

New tag;

<f:ajax />

Page 12: Exploring Js f 2 and Prime Faces

AJAX and JSF 2.0

PartialViewContext API

Partial Processing (execute)

Partial Rendering (render)

Standard request parameters

Page 13: Exploring Js f 2 and Prime Faces

f:ajaxAjax 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” />

Page 14: Exploring Js f 2 and Prime Faces

No XML

faces-config.xml is not optional

Get rid of;

<managed-bean />

<navigaton-case />

<component />, <renderer />

<converter />, <validator />

...

Page 15: Exploring Js f 2 and Prime Faces

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 { }

Page 16: Exploring Js f 2 and Prime Faces

Managed Beans with JSF 2.0

NO XML

@ManagedBean public class ItemView { }

Page 17: Exploring Js f 2 and Prime Faces

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 }

Page 18: Exploring Js f 2 and Prime Faces

Dependencies with JSF 2.0

@ManagedBean(name=”itemService”) @ApplicationScoped public class ItemServiceImpl implements ItemService {

}

NO XML

@ManagedBean public class ItemView {

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

//getter&setter

}

Page 19: Exploring Js f 2 and Prime Faces

Scopes

@RequestScoped

@ViewScoped

@SessionScoped

@CustomScoped

Flash scope

Page 20: Exploring Js f 2 and Prime Faces

View Scope

Between request and session

Lives for postbacks

#{viewScope}

UIViewRoot.getViewMap()

Page 21: Exploring Js f 2 and Prime Faces

Flash Scope

ROR concept

Lives in subsequent request

Survives redirect

Post-Redirect-Get

#{flash}

ExternalContext.getFlash()

Page 22: Exploring Js f 2 and Prime Faces

System Events

Phaselisteners are not enough

Subscribe to various events in lifecycle

Application Events

Component Events

Page 23: Exploring Js f 2 and Prime Faces

Application Events

Application wide events

ExceptionQueuedEvent

PostConstructApplicationEvent

PreDestroyApplicationEvent

more...

Page 24: Exploring Js f 2 and Prime Faces

Component Events

View based events

PostAddToViewEvent

PreValidateEvent

PreRenderViewEvent

more...<h:inputText value=”#{bean.value}”><f:event type=”preValidate” listener=”#{bean.preValidate}” />

</h:inputText>

Page 25: Exploring Js f 2 and Prime Faces

Event Listeners

New API SystemEventListener

isListenerForSource(Object source)

processEvent(SystemEvent event)

Configure via xml or @ListenerFor

Application.subscribeToEvent(event, listener);

UIComponent.subscribeToEvent(event, listener);

Page 26: Exploring Js f 2 and Prime Faces

Navigations

Implicit Navigation

Configurable NavigationHandler

Page 27: Exploring Js f 2 and Prime Faces

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

Page 28: Exploring Js f 2 and Prime Faces

Navigations with JSF 2.0

public String buttonClick() {return “target”;

}

source.xhtml target.xhtml

NO XML

Page 29: Exploring Js f 2 and Prime Faces

GET Support

Navigate by GET

View Metadata and View Parameters

Bookmarkable URLs

Post-Redirect-Get

Page 30: Exploring Js f 2 and Prime Faces

GET Support with JSF 1.x

Assigned when bean is used for first time

No validation/conversion support

No post assignment listener (init view)

<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>

http://www.site.com/itemView.jsf?itemId=10

Page 31: Exploring Js f 2 and Prime Faces

GET Support with JSF 2.0

Introducing ViewParameters

Validation/conversion support

Post assignment listener (init view)

<f:view><f:metadata>

<f:viewParam name=”itemId” value=”#{itemView.itemId}” /></f:metadata>

</f:view>

http://www.site.com/itemView.jsf?itemId=10

Page 32: Exploring Js f 2 and Prime Faces

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>

Page 33: Exploring Js f 2 and Prime Faces

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

}

Page 34: Exploring Js f 2 and Prime Faces

GET Support with JSF 1.2

GET component h:outputLink

Manual URL generation

No support for;

context-path

navigation-rules

<h:outputLink value=”#{request.contextPath}”/itemView.jsf?itemId=10>View Item

</h:outputLink>

Page 35: Exploring Js f 2 and Prime Faces

GET Support with JSF 2.0

<h:button /> and <h:link />

Auto generated Bookmarkable URLs

Integrated with Navigation Rules

<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>

Page 36: Exploring Js f 2 and Prime Faces

Project Stage

Runtime hint

Mostly for use of implementation and extensions

Development, Production, SystemTest, UnitTest

Application.getProjectStage()

<context-param><param-name>javax.faces.PROJECT_STAGE</param-name><param-value>Development</param-value>

</context-param>

Page 37: Exploring Js f 2 and Prime Faces

Behaviors

Attaching behaviors

One built-in client behavior, f:ajax

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

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

</h:commandButton>

Page 38: Exploring Js f 2 and Prime Faces

State Saving in JSF 1.x

Full Component Tree saved/restored

Attributes saved/restored

Performance/Memory issues

Burden for component developer

Page 39: Exploring Js f 2 and Prime Faces

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

Page 40: Exploring Js f 2 and Prime Faces

Resource Loading with JSF 1.xLoading bundles resources from jar

Custom Servlet or Filter required

Page 41: Exploring Js f 2 and Prime Faces

Resource Loading with JSF 2.0

New Resource APIs for;

Registering

Relocating

Loading

locale, version support

New components

<h:outputStylesheet /> and <h:outputScript />

Page 42: Exploring Js f 2 and Prime Faces

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 {}

Page 43: Exploring Js f 2 and Prime Faces

Relocating

Resources placed at head or body

<h:head />, <h:body />

UIViewRoot.addComponentResource API

@ResourceDependency(name=”cool.js”, library=”mycoollib”, target=”head”)public class MyCoolComponent extends UIComponent {}

Page 44: Exploring Js f 2 and Prime Faces

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’}”/>

Page 45: Exploring Js f 2 and Prime Faces

Resources in CSS

#{resource} variable

Generates;

.header {background:url(“#{resource[‘mylib:header.png’]}”);

}

.header {background:url(“/myapp/javax.faces.resource/header.png?ln=mylib”);

}

Page 46: Exploring Js f 2 and Prime Faces

Bean ValidationJSR-303 Integration

Reuse constraints@NotNull

@Size(min=5, max=10) private String title;

<h:inputText value=”#{bean.item.title}” required=”true”><f:validateLength min=”5” max=”10” />

</h:inputText/>

instead of

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

Page 47: Exploring Js f 2 and Prime Faces

UI ComponentsStandard JSF Components (button, radio, checkbox)

Third Party Suites (e.g. PrimeFaces)

But how to build your own?

Page 48: Exploring Js f 2 and Prime Faces

Custom Components with JSF 1.x

5 different artifacts required

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

JSP Tag Class Component Class

Renderer Class

Page 49: Exploring Js f 2 and Prime Faces

Custom Components with JSF 2.0

One .xhtml file is enough

component.xhtml

Page 50: Exploring Js f 2 and Prime Faces

DatePicker Demo

<prime:datePicker />

/webroot/resources/prime/datepicker.xhtml

/webroot/resources/jquery/...

Page 51: Exploring Js f 2 and Prime Faces

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)

PRIMEFACES

Page 52: Exploring Js f 2 and Prime Faces

Setup

No setup required, drop the jar and add the namespace;

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

<p:editor />

Page 53: Exploring Js f 2 and Prime Faces

PrimeFaces UI

Page 54: Exploring Js f 2 and Prime Faces

PrimeFaces Ajax

Based on standard JSF 2.0 Ajax APIs

Extensions;

p:ajax

callbacks

p:ajaxStatus

jquery based client side api implementation

Page 55: Exploring Js f 2 and Prime Faces

Callbacks

onstart

oncomplete

onsuccess

onerror

p:ajax f:ajaxonevent

onerror

Page 56: Exploring Js f 2 and Prime Faces

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;

}

Page 57: Exploring Js f 2 and Prime Faces

Unobstrusive<p:schedule value=”#{bean.mode}” editable=”true”/>

<div id=”_gen”></div> <script type=”text/javascript”>

new PrimeFaces.widget.Schedule(‘_gen’, {editable:true}); </script>

JSF Page:

Renders:

You get:

Page 58: Exploring Js f 2 and Prime Faces

Progressive Enhancement<p:button value=”Submit” />

<button id=”gen”>Submit</button> <script type=”text/javascript”>

new PrimeFaces.widget.Button(‘_gen’); </script>

JSF Page:

Renders:

You get:

Page 59: Exploring Js f 2 and Prime Faces

Themes

Integrated with ThemeRoller

25+ Built-in Themes

Online ThemeCreator to create your own easily

Page 60: Exploring Js f 2 and Prime Faces

Theme Gallery

Page 61: Exploring Js f 2 and Prime Faces

How to Create Your Own

No need to know CSS

Disable default skin

See: http://vimeo.com/14235640

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

</context-param>

Page 62: Exploring Js f 2 and Prime Faces

PrimeFaces Demo

Page 63: Exploring Js f 2 and Prime Faces

Ajax Push

Powered by Atmosphere Framework

Currently Proof-of-Concept (http-streaming)

Future;

WebSockets, Long-Polling, Http-Streaming

Page 64: Exploring Js f 2 and Prime Faces

TouchFaces

Mobile UI components

Optimized for webkit (eg IPhone, Android)

Native looking webapps

jqtouch based

Page 65: Exploring Js f 2 and Prime Faces

TouchFaces Demo

Translate Chat - Ajax Push PathFinder - GPS TwitFaces

Weather Notes News

Page 66: Exploring Js f 2 and Prime Faces

Integration

Spring Core

Spring WebFlow

Seam

CDI

Portlets

Page 67: Exploring Js f 2 and Prime Faces

IDE Support

Page 68: Exploring Js f 2 and Prime Faces

Documentation

400+ pages (for now)

Component reference, examples, tips

Page 69: Exploring Js f 2 and Prime Faces

Community Support

Huge community, 500 posts every week

Page 70: Exploring Js f 2 and Prime Faces

Enterprise Support

Fast reponse times

Priority forum access

Custom component development

http://www.primefaces.org/support.html

Page 71: Exploring Js f 2 and Prime Faces

2.2 Trailer

Page 72: Exploring Js f 2 and Prime Faces

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

Page 73: Exploring Js f 2 and Prime Faces

Finale

http://www.primefaces.org

[email protected]

optimus.prime in PrimeFaces Forum