ajax applications with jsf 2 and new richfaces 4 - tssjs

93
Exadel #{Ajax Applications with JSF 2 and New RichFaces 4} TheServerSide Java Symposium March 18th, 2011 Max Katz Exadel

Upload: max-katz

Post on 22-May-2015

9.395 views

Category:

Technology


6 download

DESCRIPTION

RichFaces 4 presentation at TheServerSide Java Symposium in Las Vegas, March 2011

TRANSCRIPT

Page 1: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

#{Ajax Applications with JSF 2 and New RichFaces 4}

TheServerSide Java SymposiumMarch 18th, 2011

Max KatzExadel

Page 2: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

About Me

● Senior Systems Engineer at Exadel

◦ JSF, RichFaces, Java EE

◦ exadel.org – open source projects and community

◦ Tiggr (http://gotiggr.com) – interactive Web and mobile HTML prototypes

Page 3: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Author of Practical RichFaces

(Apress)

4

Lead-author of Practical RichFaces, 2/e

(Apress, June 2011)

New!

Page 4: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

New!

Page 5: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

exadel.org – open source projects and community

● Exadel Flamingo

● Exadel Fiji

● Exadel jsf4birt

● Exadel JavaFX Plug-in for Eclipse

Page 6: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Tiggr

Creating interactive Web and mobile HTML prototypes

[http://gotiggr.com]

Page 7: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Page 8: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Web Preview [desktop][gotiggr.com/preview/6669]

Web Preview [mobile][gotiggr.com/preview/5673]

Page 9: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

mkblog.exadel.com

@maxkatz

Page 10: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Exadel

● Products and services company

● Founded in 1998, headquarters in San Francisco Bay Area (Concord)

● 350+ employees

Page 11: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Exadel Locations – Europe

Page 12: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Products

● Open Source with JBoss

◦ RichFaces

◦ JBoss Tools/JBoss Developer Studio

● exadel.org

◦ Flamingo

◦ Fiji (JSF – JavaFX/Flex integration)

◦ jsf4birt (JSF – BIRT/Actuate integration)

◦ JavaFX Plug-in for Eclipse

● Tiggr – interactive Web and mobile HTML prototypes

Page 13: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Services

● Rich enterprise application development

● Eclipse development

● Custom rich component development

● Mobile development

● Training

● Most projects are done in Eastern Europe

Page 14: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

The Plan

● Ajax features in JSF 2

● The new RichFaces 4

Page 15: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

JavaServer Faces™ (JSF) is the standard component-based user interface (UI)

framework for the Java EE (5 & 6) platform

JSF 1.2 Java EE 6

JSF 2 Java EE 6

Page 16: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

JSF 2

● JSF 2 is a major upgrade over JSF 1.x

● Many features, ideas taken from projects such as Seam and RichFaces, and others

Page 17: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

● Facelets

● Composite components

● Implicit navigation

● GET support

◦ h:link, h:button

● Resource loading

JSF 2 new features

● New scopes

◦ Flash, View, custom

● Configuration via annotations

● Bean Validation support

● Basic Ajax

Page 18: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

JSF 2 <f:ajax>

● Very basic Ajax functionality

● Greatly inspired by RichFaces 3 <a4j:support> tag

● Ajax in JSF in 3 easy steps:

1. Firing an Ajax request

2.Partial view processing

3.Partial view rendering

Page 19: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<h:form> <h:input value="#{bean.word}"/> <h:commandButton> <f:ajax event="click" execute="@form" listener="#{bean.ajaxListener}" render="out1 out2"/> </h:commandButton> <h:input value="#{bean.text}" id="out1"/> <h:input value="#{bean.phrase}" id="out2"/></h:form>

1

2

3

Page 20: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<h:form> <h:input value="#{bean.word}"/> <h:selectOneMenu value="#{bean.selected}"> <f:selectItems value="#{bean.items}"/> <f:ajax event="change" execute="@form" listener="#{bean.ajaxListener}" render="@form"/> </h:commandButton> <h:input value="#{bean.text}" id="out1"/> <h:input value="#{bean.phrase}" id="out2"/></h:form>

1

2

3

Page 21: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Attribute Value

eventEvent on which to fire the Ajax request

execute

@all@this (default)@form@noneId'sEL

render

@all@this@form@none (default)Id's EL

Important <f:ajax> attributes

Page 22: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

That's good, but where do you get rich components and

more?

A rich component framework is still(?) needed to build

real-world Ajax applications.

Page 23: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces 4 – rich JSF framework

● JSF 2 based

● Components

◦ a4j:* tag library (core)

◦ rich:* tag library (UI)

● Skins

● Client-side validation (Bean Validation/JSR 303 based)

● CDK – Component Development Kit

Page 24: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces versions

Version JSF 1.1 JSF 1.2 JSF 2

RichFaces 3.1.x •RichFaces 3.3.3* • •RichFaces 4 •* Note: RichFaces 3.3.3 has basic JSF 2 support

Page 25: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Deploy on any server which supports JSF 2

Any browser

Page 26: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces history

2005: started by Alexander Smirnov

2005-2007: Developed by Exadel Ajax4jsf - open source, free RichFaces - commercial

2007: JBoss takes over

Exadel team continues to develop the framework, project is known as RichFaces

Page 27: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Just tell me when RichFaces 4 is going to be released?

Page 28: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Good, now tell me what's really new and improved in

RichFaces 4?

Page 29: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces 4

JavaScript in RichFaces is now entirely based on the

popular jQuery library.

Page 30: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces 4

● All components are reviewed for consistency, usability

● Redesigned following semantic HTML principles

● Server-side and client-side performance optimization

● Strict code clean-up and review

Page 31: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces 4

● New client-side validation based on Bean Validation (JSR 303)

Page 32: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces 4

● New and easy to use CDK (Component Development Kit)

● Quickly build your own custom rich components

Page 33: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Cloud deployment

● Google App Engine (GAE)

● Amazon EC2

● Special Maven-based plug-in available

Page 34: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces <a4j:ajax>

● 100% based on standard <f:ajax>

● Just replace f: with a4j: and get exactly the same functionality

● But, you get extra features...<h:commandButton> <f:ajax execute="@form" render="output"/></h:commandButton>

<h:commandButton> <a4j:ajax execute="@form" render="output"/></h:commandButton>

Page 35: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Attribute Description

onbegin JavaScript to execute before Ajax request

onbeforedomupdateJavaScript to execute after response comes back but before DOM update

oncomplete JavaScript to execute after DOM update

bypassUpdatesSkips Update Model and Invoke Application phases, useful for form validation

limitRenderSkips all a4j:outputPanel ajaxRender=”true” areas. Only renders what is set in current render

status Status to display during Ajax request

<a4j:ajax> attributes

Page 36: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

That's not all, there are more RichFaces goodies...

Page 37: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces 4 core – firing an Ajax request

● a4j:ajax

● a4j:commandButton

● a4j:commandLink

● a4j:jsFunction

● a4j:poll

● a4j:push

Page 38: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<a4j:commandButton> – Ajax button

/* standard button with f:ajax */<h:commandButton value="Save" action="#{bean.action}"> <f:ajax execute="@form" render="output"/></h:commandButton>

/* RichFaces button */<a4j:commandButton value="Save" execute="@form" render="output" action="#{bean.action}" />

Page 39: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<table> ... <td onmouseover="update('yellow')"/> ...</table><h:form> <a4j:jsFunction name="update" action="#{bean.change}" reRender="panel"> <a4j:param value="param1" assignTo="#{bean.color}"/> </a4j:jsFunction><h:form>

<a4j:jsFunction> – fire Ajax request from any JavaScript function

Page 40: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<a4j:poll> – periodically send an Ajax request

<a4j:poll interval="1000" action="#{bean.count}"

render="output" enabled="#{bean.pollEnabled}" />

<h:panelGrid id="output">...</h:panelGrid>

Page 41: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<a4j:push>

● Server-side events are pushed to client using Comet or WebSockets.

● Implemented using Atmosphere

● Provides excellent integration with EE containers, and advanced messaging services

<a4j:push address="topic@chat" ondataavailable="alert(event.rf.data)" />

Page 42: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFace 4 core – advanced features and rendering● a4j:outputPanel

● limitRender attribute

● render=”{bean.renderList}”

● a4j:param

Page 43: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<a4j:outputPanel> – auto rendered panel

<h:selectOneMenu value="#{bean.fruit}"> <a4j:ajax listener="#{bean.change}"/></<h:selectOneMenu><a4j:outputPanel ajaxRendered="true"> <h:panelGrid> ... </h:panelGrid> <h:panelGrid> ... </h:panelGrid></a4j:outputPanel>

Rendered on every Ajax request

Page 44: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Advanced rendering options: limitRender

<a4j:commandButton render="output"/><a4j:commandButton render="output" limitRender="true"/>

<h:panelGrid id="output">...</h:panelGrid>

<a4j:outputPanel ajaxRendered="true">...</a4j:outputPanel>

Turns off all auto rendered panels,only renders what is set in currentrender

Page 45: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

render=”#{bean.renderList}”

1) Ajax request sent

2) Component id's to be rendered resolved

3) Component id's are rendered into the page

4) 2nd Ajax request is sent. In this request the components (resolved in step 2 are sent with request) will be rendered

1) Ajax request sent

2) Component id's to be rendered resolved

3) Component id's are rendered

JSF RichFaces

Page 46: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<a4j:param>

● Similar to <f:param> but simpler as it also assigns the value to a bean property automatically

<a4j:commandButton value="Save"> <a4j:param name="product" value="1009"/></a4j:commandButton>

public class Bean { private String product; public void setProduct (String product) {...} public String getProduct () {...}}

Page 47: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFace 4 core – advanced processing● a4j:region

● bypassUpdates attribute

Page 48: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<a4j:region> – declaratively define execute region<h:form> <a4j:region> <h:inputText /> <h:inputText /> <a4j:commandButton execute="@region"/> <a4j:region></h:form>

<h:form> <a4j:region> <h:inputText /> <h:inputText /> <a4j:commandButton /> <a4j:region></h:form>

Execute options: ● @all● @this (default)● @form● @none● Id's● EL● @region

Page 49: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Skipping phases when validating

<h:inputText id="name" value="#{bean.name}"/> <a4j:ajax event="blur" bypassUpdates="true"/></h:inputText><rich:message for="name"/>

1.Restore View2.Apply Request Values3.Process Validation4.Update Model5.Invoke Application6.Render Response

Page 50: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFace 4 core – other advanced features● a4j:status

● a4j:log

● a4j:queue

● JavaScript interactions

Page 51: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<a4j:status> – Ajax request status

<a4j:status name="ajaxStatus"> <f:facet name="start"> <h:graphicImage value="ajaxStatus.jpg"/> </f:facet></a4j:status>

<h:form> <inputText /> <inputText /> <a4j:commandButton status="ajaxStatus"/></h:form>

Page 52: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<a4j:log> – Ajax request information● Levels:

◦ debug, info, warn, error

Page 53: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

JSF 2 queue

● JSF 2 has very basic queue functionality

● Events are queued and fired one at a time

● Only one request is processed on the server at a time

Page 54: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces queue upgrades

● Delay firing of a request

● Combine requests from one or more controls

● Cancel DOM updates if “similar” request was fired

● Define queue as:

◦ Global (all views have queue)

◦ View-based

◦ Form-based

◦ Named (used by particular components only)

Page 55: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces <a4j:queue>

<a4j:queue requestDelay="2000"/>...<a4j:commandButton value="Button1"/><a4j:commandButton value="Button2"/>

<a4j:queue requestDelay="2000"/>...<a4j:commandButton> <a4j:attachQueue requestDelay="1000"/></a4j:commmandButton><a4j:commandButton />

Delay request by 2 seconds

Overwrite default delay request by 1 second

Page 56: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

a4j:queue – “combining” events

<a4j:queue requestDelay="2000"/>...<a4j:commandButton> <a4j:attachQueue requestGroupingId="mainGroup"/></a4j:commmandButton><a4j:commandButton> <a4j:attachQueue requestGroupingId="mainGroup"/></a4j:commmandButton>

Page 57: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

a4j:queue – ignoring “stale” responses

<a4j:queue requestDelay="2000 ingoreDupResponses="true"/>

<h:inputText value="#{bean.state}"> <a4j:ajax event="keyup" listener="#{bean.load}" render="states"/></h:inputText>

<rich:dataTable id="states"> <rich:column/></rich:dataTable>

Page 58: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

JavaScript interactions

<a4j:commandLink value="Link" onbegin="ajaxOnBegin()" onbeforedomupdate="ajaxOnBeforeDomUpdate()" oncomplete="ajaxOnComplete()"></a4j:commandLink>

<h:commandLink value="Link" <f:ajax onevent="ajaxEvent();"></h:commandLink>

Called three times:1) begin2) success3) complete

Events are separated for easier development

Page 59: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces UI components

● Output, panels

● Input

● Menu

● Data iteration

● Tree

● Drag and drop

● Client side validation

● Miscellaneous

Page 60: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

rich:tab

rich:accordionrich:accordion

rich:progressBar

Page 61: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

More rich output, panels

● rich:panel

● rich:togglePanel

● rich:popupPanel

● rich:collapsiblePanel

● rich:toolTip

Page 62: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

rich:calendar

rich:inplaceInput

rich:inputNumberSlider

rich:autocomplete

Page 63: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

More rich input

● rich:inputNumberSpinner

● rich:inplaceSelect

● rich:select

● rich:fileUpload

Page 64: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

rich:panelMenu

rich:toolBar

rich:dropDownMenu

Page 65: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

rich:dataTable

rich:dataTable withrich:collapsibleSubTable

rich:dataScroller

Page 66: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Partial table update

render="@row"

render="@column"render="@header"

render="@footer"

render="@body"

render="cellId"

To render from outside the table:render="tableId@header"render="tableId@body"render="tableId@footer"

Page 67: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Partial table updaterender="tableId:#{bean.rowsSet}"

render="tableId:#{bean.rowsSet}:cellId"

Page 68: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

More rich data iteration

● a4j:repeat

● rich:extendedDataTable

● rich:list

◦ list | ordered | definition

● rich:dataGrid

● rich:column

◦ Column and row spanning

◦ Filtering, sorting

Page 69: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

rich:tree

Page 70: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Drag and drop

Page 71: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Client-side validation based on Bean Validation

(JSR 303)

New in RichFaces 4

Page 72: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Bean Validation (JSR 303)

● JSF 2 has support for Bean Validation (server-side)

public class Bean { @Email private String email;}

<h:inputText id="email" value="#{bean.email}"> <a4j:ajax event="blur"/></h:inputText><rich:message for="email"/>

Page 73: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces client validation <rich:validator>

public class Bean { @Email private String email;}

<h:inputText id="email" value="#{bean.email}"> <rich:validator event="keyup"/></h:inputText><rich:message for="email"/>

Page 74: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces client validation <rich:graphValidator>

<rich:graphValidator value="#{bean}" id="gv"> ... <h:inputText value="#{bean.password1}"/> <h:inputText value="#{bean.password2}"/> <rich:message for="email" for="gv"/></rich:graphValidator>

@Size(min=5,max=15,message="...")private String password1;@Size(min=5,max=15,message="...")private String password2;

@AssertTrue(message="Password don't match")public boolean isPasswordsEquals() { return password1.equals(password1);}

Page 75: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

RichFaces client functions

Function Description

rich:client(id) Returns component client id

rich:element(id) Returns DOM element

rich:component(id)Returns RichFaces client component instance to call JS API method

rich:isUserInRole(role) Returns if the user has specified role

rich:findComponent(id)Returns component instance for given short id

Page 76: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

rich:component(id) function

● Allows to call JS API on a component

<input type="button" onclick="#{rich:component('popup')}.show();"

value="Open" />

<rich:popupPanel id="popup"> <h:outputLink value="#"

onclick="#{rich:component('popup')}.hide(); return false;">

<h:outputText value="Close"/> </h:outputLink></rich:popupPanel>

Page 77: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Rich miscellaneous

● rich:componentControl

● rich:hashParam

● rich:jQuery

Page 78: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<rich:componentControl>

● Allows to call JS API on a component in declarative fashion

<h:outputLink id="openLink" value="#"><h:outputText value="Open" /><rich:componentControl event="click"

operation="show" target="popup" /></h:outputLink>

<rich:popupPanel id="popup">... </rich:popupPanel>

Page 79: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<rich:hashParam>

● Group client side parameters into a hash map to be passed to component client API

<h:commandButton value="Show popup"> <rich:componentControl target="pp" operation="show"> <rich:hashParam> <f:param name="width" value="500" /> <f:param name="height" value="300" /> <f:param name="minWidth" value="300" /> <f:param name="minHeight" value="150" /> </rich:hashParam> </rich:componentControl></h:commandButton

Page 80: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

<rich:jQuery>

<input type="button" id="changeButton" value="Change title" /><rich:jQuery selector="#changeButton" query="click(function(){

$('#panel #panel_header').text('Capital of Russia');})"/>

<rich:panel header="Moscow" id="panel"> Moscow is the capital, the most populous ...</rich:panel>

Page 81: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Skins

Page 82: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Skins

● Lightweight extension on top of CSS

● Change look and feel of all rich component with a few minor changes

● Can be applied to standard JSF and HTML tags as well

Page 83: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Ready-to-use skins

● classic

● wine

● blueSky

● ruby

● emeraldTown

● deepMarine

● plain

● japanCherry

<context-param> <param-name>org.richfaces.skin</param-name> <param-value>ruby</param-value></context-param>

Page 84: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Skin file (just a property file)

#ColorsheaderBackgroundColor=#900000headerGradientColor=#DF5858headerTextColor=#FFFFFFheaderWeightFont=bold

generalBackgroundColor=#f1f1f1generalTextColor=#000000generalSizeFont=11pxgeneralFamilyFont=Arial, Verdana, sans-serif

controlTextColor=#000000controlBackgroundColor=#ffffffadditionalBackgroundColor=#F9E4E4

Page 85: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Skins

● Modify existing or create your own

● Change skins in runtime

<context-param> <param-name>org.richfaces.skin</param-name> <param-value>myCoolSkin</param-value></context-param>

<context-param> <param-name>org.richfaces.skin</param-name> <param-value>#{bean.skin}</param-value></context-param>

Page 86: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Overwriting skins<style> .rf-p-hr { // your custom style, applied to all panels on // on page } .panelHeader { // custom header style } </style>

<rich:panel id="panel1">... </rich:panel id="panel2"><rich:panel headerClass="panelHeader">... </rich:panel>

Page 87: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Skinning standard JSF tags and HTML tags

<h:button style="background-color: '#{richSkin.tableBackgroundColor}'"/>

Apply to each control:

<context-param> <param-name> org.richfaces.enableControlSkinning </param-name> <param-value>true</param-value></context-param>

Apply to all standard controls (JSF and HTML):

Page 88: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Skinning standard JSF tags and HTML tags

<context-param> <param-name> org.richfaces.enableControlSkinningClasses </param-name> <param-value>true</param-value></context-param>

<div class="rfs-ctn"> <h:panelGrid columns="1"> <h:outputText /> <h:inputText /> <h:commandButton /> </h:panelGrid></div>

Can be applied to <h:panelGrid>, <rich:panel>, <div> Any standard controls inside the container will be skinned using standard controls skinning classes.

Page 89: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Where can I try the new RichFaces 4?

http://richfaces-showcase.appspot.com

Page 90: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

How can we help with RichFaces

● Web development with RichFaces

● Version 3 to 4 migration

● Performance tune-up

● Custom component

development

● On-site training

Training Days

JSF 1.2, 2 1-2

RichFaces 3, 4 1-2

JSF and RichFaces 2-3

RichFaces 3 to 4 1-2

Page 91: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

That's it for RichFaces, there is one more thing I want to

show you.

Page 92: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

Web Preview [desktop][gotiggr.com/preview/6669]

Web Preview [mobile][gotiggr.com/preview/5673]

Page 93: Ajax Applications with JSF 2 and New RichFaces 4 - TSSJS

Exadel

mkblog.exadel.com

@maxkatz

[email protected]

gotiggr.com

Thank you!