in the brain of cagatay civici: exploring javaserver faces 2.0 and primefaces

73
EXPLORING JSF 2.0 AND PRIMEFACES Cagatay Civici PRIME TECHNOLOGY

Upload: skills-matter

Post on 06-May-2015

6.820 views

Category:

Technology


8 download

DESCRIPTION

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

TRANSCRIPT

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

EXPLORING JSF 2.0AND

PRIMEFACES

Cagatay Civici

PRIMETECHNOLOGY

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

Cagatay Civici

JSF EG (Expert Group) Member

PrimeFaces Lead

Apache MyFaces PMC

Speaker, Author, Reviewer

Consultant and Trainer for Prime Technology

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

Topics

JSF Overview

What’s New in JSF 2.0?

Go beyond with PrimeFaces

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

JSF Overview

Standard for Java EE

Component Oriented

Event Driven

RenderKits (web, mobile ...)

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

History

JSR 127 - JSF 1

JSR 252 - JSF 1.2

JSR-314 - JSF 2.0 <- Coolest one

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

JSP with JSF

Mismatch

JSP tags create JSF components

Content vs Component

Two different lifecycles

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

Facelets / VDL

XHTML based

Optimized for JSF

Templating

New View Declaration Language API

NOW STANDARD!

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

AJAX and JSF 2.0

Now Standard!

New APIs;

Server: PartialViewContext

Client: jsf.ajax.AjaxRequest

New tag;

<f:ajax />

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

AJAX and JSF 2.0

PartialViewContext API

Partial Processing (execute)

Partial Rendering (render)

Standard request parameters

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

No XML

faces-config.xml is not optional

Get rid of;

<managed-bean />

<navigaton-case />

<component />, <renderer />

<converter />, <validator />

...

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Managed Beans with JSF 2.0

NO XML

@ManagedBean public class ItemView { }

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Scopes

@RequestScoped

@ViewScoped

@SessionScoped

@CustomScoped

Flash scope

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

View Scope

Between request and session

Lives for postbacks

#{viewScope}

UIViewRoot.getViewMap()

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

Flash Scope

ROR concept

Lives in subsequent request

Survives redirect

Post-Redirect-Get

#{flash}

ExternalContext.getFlash()

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

System Events

Phaselisteners are not enough

Subscribe to various events in lifecycle

Application Events

Component Events

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

Application Events

Application wide events

ExceptionQueuedEvent

PostConstructApplicationEvent

PreDestroyApplicationEvent

more...

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Navigations

Implicit Navigation

Configurable NavigationHandler

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Navigations with JSF 2.0

public String buttonClick() {return “target”;

}

source.xhtml target.xhtml

NO XML

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

GET Support

Navigate by GET

View Metadata and View Parameters

Bookmarkable URLs

Post-Redirect-Get

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

State Saving in JSF 1.x

Full Component Tree saved/restored

Attributes saved/restored

Performance/Memory issues

Burden for component developer

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Resource Loading with JSF 1.xLoading bundles resources from jar

Custom Servlet or Filter required

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

UI ComponentsStandard JSF Components (button, radio, checkbox)

Third Party Suites (e.g. PrimeFaces)

But how to build your own?

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Custom Components with JSF 2.0

One .xhtml file is enough

component.xhtml

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

DatePicker Demo

<prime:datePicker />

/webroot/resources/prime/datepicker.xhtml

/webroot/resources/jquery/...

Page 51: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and 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)

PRIMEFACES

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

Setup

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

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

<p:editor />

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

PrimeFaces UI

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

PrimeFaces Ajax

Based on standard JSF 2.0 Ajax APIs

Extensions;

p:ajax

callbacks

p:ajaxStatus

jquery based client side api implementation

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

Callbacks

onstart

oncomplete

onsuccess

onerror

p:ajax f:ajaxonevent

onerror

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Themes

Integrated with ThemeRoller

25+ Built-in Themes

Online ThemeCreator to create your own easily

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

Theme Gallery

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

PrimeFaces Demo

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

Ajax Push

Powered by Atmosphere Framework

Currently Proof-of-Concept (http-streaming)

Future;

WebSockets, Long-Polling, Http-Streaming

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

TouchFaces

Mobile UI components

Optimized for webkit (eg IPhone, Android)

Native looking webapps

jqtouch based

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

TouchFaces Demo

Translate Chat - Ajax Push PathFinder - GPS TwitFaces

Weather Notes News

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

Integration

Spring Core

Spring WebFlow

Seam

CDI

Portlets

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

IDE Support

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

Documentation

400+ pages (for now)

Component reference, examples, tips

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

Community Support

Huge community, 500 posts every week

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

Enterprise Support

Fast reponse times

Priority forum access

Custom component development

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

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

2.2 Trailer

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

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: In The Brain of Cagatay Civici: Exploring JavaServer Faces 2.0 and PrimeFaces

Finale

http://www.primefaces.org

[email protected]

optimus.prime in PrimeFaces Forum