Download - exploringjsf2andprimefaces_011010
![Page 1: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/1.jpg)
EXPLORING JSF 2.0AND
PRIMEFACES
Cagatay Civici
PRIMETECHNOLOGY
![Page 2: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/2.jpg)
Cagatay Civici
JSF EG (Expert Group) Member
PrimeFaces Lead
Apache MyFaces PMC
Speaker, Author, Reviewer
Consultant and Trainer for Prime Technology
![Page 3: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/3.jpg)
Topics
JSF Overview
What’s New in JSF 2.0?
Go beyond with PrimeFaces
![Page 4: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/4.jpg)
JSF Overview
Standard for Java EE
Component Oriented
Event Driven
RenderKits (web, mobile ...)
![Page 5: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/5.jpg)
HistoryRoots go back to 2001
JSR-127 JSF 1.0, 2004
JSR-127 JSF 1.1, 2004
JSR- 252 JSF 1.2, 2006
JSR-314 JSF 2.0, 2009
JSF 1.0 JSF 2.0
![Page 6: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/6.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/7.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/8.jpg)
JSP with JSF
Mismatch
JSP tags create JSF components
Content vs Component
Two different lifecycles
![Page 9: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/9.jpg)
Facelets / VDL
XHTML based
Optimized for JSF
Templating
New View Declaration Language API
NOW STANDARD!
![Page 10: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/10.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/11.jpg)
AJAX and JSF 2.0
Now Standard!
New APIs;
Server: PartialViewContext
Client: jsf.ajax.AjaxRequest
New tag;
<f:ajax />
![Page 12: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/12.jpg)
AJAX and JSF 2.0
PartialViewContext API
Partial Processing (execute)
Partial Rendering (render)
Standard request parameters
![Page 13: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/13.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/14.jpg)
No XML
faces-config.xml is not optional
Get rid of;
<managed-bean />
<navigaton-case />
<component />, <renderer />
<converter />, <validator />
...
![Page 15: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/15.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/16.jpg)
Managed Beans with JSF 2.0
NO XML
@ManagedBean public class ItemView { }
![Page 17: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/17.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/18.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/19.jpg)
Scopes
@RequestScoped
@ViewScoped
@SessionScoped
@CustomScoped
Flash scope
![Page 20: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/20.jpg)
View Scope
Between request and session
Lives for postbacks
#{viewScope}
UIViewRoot.getViewMap()
![Page 21: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/21.jpg)
Flash Scope
ROR concept
Lives in subsequent request
Survives redirect
Post-Redirect-Get
#{flash}
ExternalContext.getFlash()
![Page 22: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/22.jpg)
System Events
Phaselisteners are not enough
Subscribe to various events in lifecycle
Application Events
Component Events
![Page 23: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/23.jpg)
Application Events
Application wide events
ExceptionQueuedEvent
PostConstructApplicationEvent
PreDestroyApplicationEvent
more...
![Page 24: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/24.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/25.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/26.jpg)
Navigations
Implicit Navigation
Configurable NavigationHandler
![Page 27: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/27.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/28.jpg)
Navigations with JSF 2.0
public String buttonClick() {return “target”;
}
source.xhtml target.xhtml
NO XML
![Page 29: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/29.jpg)
GET Support
Navigate by GET
View Metadata and View Parameters
Bookmarkable URLs
Post-Redirect-Get
![Page 30: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/30.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/31.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/32.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/33.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/34.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/35.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/36.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/37.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/38.jpg)
State Saving in JSF 1.x
Full Component Tree saved/restored
Attributes saved/restored
Performance/Memory issues
Burden for component developer
![Page 39: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/39.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/40.jpg)
Resource Loading with JSF 1.xLoading bundles resources from jar
Custom Servlet or Filter required
![Page 41: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/41.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/42.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/43.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/44.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/45.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/46.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/47.jpg)
UI ComponentsStandard JSF Components (button, radio, checkbox)
Third Party Suites (e.g. PrimeFaces)
But how to build your own?
![Page 48: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/48.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/49.jpg)
Custom Components with JSF 2.0
One .xhtml file is enough
component.xhtml
![Page 50: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/50.jpg)
DatePicker Demo
<prime:datePicker />
/webroot/resources/prime/datepicker.xhtml
/webroot/resources/jquery/...
![Page 51: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/51.jpg)
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: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/52.jpg)
Setup
No setup required, drop the jar and add the namespace;
xmlns:p=”http://primefaces.prime.com.tr/ui”
<p:editor />
![Page 53: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/53.jpg)
PrimeFaces UI
![Page 54: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/54.jpg)
PrimeFaces Ajax
Based on standard JSF 2.0 Ajax APIs
Extensions;
p:ajax
callbacks
p:ajaxStatus
jquery based client side api implementation
![Page 55: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/55.jpg)
Callbacks
onstart
oncomplete
onsuccess
onerror
p:ajax f:ajaxonevent
onerror
![Page 56: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/56.jpg)
AjaxStatusDeclarative
Programmatic
Global/Non-Global
<p:ajaxStatus><f:facet name=”start”>
<p:graphicImage value=”loading.gif ” /></f:facet><f:facet name=”complete”>
<p:graphicImage value=”loading.gif ” /></f:facet>
</p:ajaxStatus>
<p:ajaxStatus onstart=”alert(‘Starting’)” oncomplete=”alert(‘Completed’)”>
<p:commandButton value=”Submit” global=”true|false”
![Page 57: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/57.jpg)
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 58: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/58.jpg)
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 59: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/59.jpg)
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 60: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/60.jpg)
Themes
Integrated with ThemeRoller
25+ Built-in Themes
Online ThemeCreator to create your own easily
![Page 61: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/61.jpg)
Theme Gallery
![Page 62: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/62.jpg)
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 63: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/63.jpg)
PrimeFaces Demo
![Page 64: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/64.jpg)
Ajax Push
Powered by Atmosphere Framework
Currently Proof-of-Concept (http-streaming)
Future;
WebSockets, Long-Polling, Http-Streaming
![Page 65: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/65.jpg)
TouchFaces
Mobile UI components
Optimized for webkit (eg IPhone, Android)
Native looking webapps
jqtouch based
![Page 66: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/66.jpg)
TouchFaces Demo
Translate Chat - Ajax Push PathFinder - GPS TwitFaces
Weather Notes News
![Page 67: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/67.jpg)
Integration
Spring Core
Spring WebFlow
Seam
CDI
Portlets
![Page 68: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/68.jpg)
Cloud SupportPrimeFaces and JSF 2.0 runs Google AppEngine
Sample: http://code.google.com/p/primefaces/source/browse/examples/trunk/appengine/
Demos;
http://primefaces-gae-kickstart.appspot.com
http://primefaces-rocks.appspot.com
![Page 69: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/69.jpg)
IDE Support
![Page 70: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/70.jpg)
Documentation
PrimeFaces Book (Commercial with 2.2)
400+ pages (for now)
Component reference, examples, tips
![Page 71: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/71.jpg)
Community Support
Huge community, 500 posts every week
![Page 72: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/72.jpg)
Enterprise Support
Fast response times
Priority forum access
Custom component development
http://www.primefaces.org/support.html
![Page 73: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/73.jpg)
2.2 Trailer
![Page 74: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/74.jpg)
PrimeFaces RoadMapMaintenance of current codebase
Rewritten Ajax Push via Atmosphere
Client Side Validation
New Components (e.g. TimeLine)
Enhanced Components (e.g. Tree, TreeTable, PickList)
Portlet samples (e.g. Liferay)
![Page 75: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/75.jpg)
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 76: exploringjsf2andprimefaces_011010](https://reader035.vdocuments.net/reader035/viewer/2022070302/5474cdc0b4af9f7a3d8b459f/html5/thumbnails/76.jpg)
Finale
http://www.primefaces.org
optimus.prime in PrimeFaces Forum