Post on 25-Jun-2015
transcript
JSF 2.0 PREVIEWCagatay Civici
About MeApache MyFaces PMC MemberCo-author of “The Definitive Guide to Apache MyFaces and Facelets”Reference in “Core JSF 2nd Edition”Recognized speaker in international and local conferences (JSFOne, JSFDays...)Oracle RCF MemberKrank Framework committerJSF Chart Creator AuthorYUI4JSF Project LeadFacesTrace Project LeadFC Barcelona FanWorking for SpringSource
AgendaOverview of JSF 1.x
Overview JSF 2.0
What is new?
Future of JSF
JSF 1.x OverviewComponent Oriented
JSF 1.0, 1.1 and 1.2
Standard (jsr 127 and 252)
Two implementations
Apache MyFaces
Mojarra (RI)
JSF 1.x - The GoodComponent oriented
Extendible
Third party components (Trinidad, Tomahawk, RichFaces, IceFaces ...)
Rapid application development
Vendor and Tool support
JSF 1.x - The BadJSP based
Performance
Not very rich
Exception handling
Too much xml
A bit more...
JSF 2.0 OverviewJSR 314
Part of JEE 6
New features, improvements and fixes
Influenced by community and trends
Other web frameworks, Ajax, JSF extensions, Component libs, blogs etc...
RoadmapJSR process started in July, 2007
Early Draft Review 1 finished on July 2008
Early Draft Review 2 finished on Oct 2008
Proposed Final Draft Date, December 2008
Timed with JEE 6
So What’s New?AJAX
Easy Component Development
Resource Loading
PDL (Page Description Language)
More Scopes
Less configuration
MoreComponent interoperability
Scripting (Groovy)
Zero deployment time
System Events
Project Stage
Client side validation
More...Bookmarks
Exception handling
Improved State Management
Extension Prioritization
Resource HandlingWhat is a resource?
css, javascript, images ...A resource has;
library, version, locale, nameTwo new classes
javax.faces.application.Resourcejavax.faces.application.ResourceHandler
Load from;/resources/META-INF/resources
Resource HandlingResource Format
Examples
Ability to load from classpath
[localePrefix/] [libraryName/] [libraryVersion/] resourceName [/resourceVersion]
- tr/mycoolcomponentlib/1.0/logo.png- mycoolcomponentlib/1.0/widget.js/1.0.js- mycoolcomponentlib/styles.css
Under /resources or /META-INF/resources
Resources and Custom Components
@ResourceDependency(name=”ajaxsuggest.js”, library=”mycoolcomponentlib”)public class InputSuggest extends UIInput {...}
@ResourceDependencies({@ResourceDependency(name=”ajaxsuggest.js”, library=”mycoolcomponentlib”)@ResourceDependency(name=”ajaxsuggest.css”, library=”mycoolcomponentlib”))}public class InputSuggest extends UIInput {...}
OR
ORApplication app = FacesContext.getCurrentInstance().getApplication();Resource resource= app.getResourceHandler().createResource(“suggest.js”,”lib”);writer.write(“<script ...”); //encode using request.getRequestPath();
Resource Location4 new tags;
Example
h:headh:bodyh:outputScripth:outputStyleSheet
...<h:head></h:head><h:body>
<h:outputScript name=”suggest.js” target=”head” /></h:body>...
Resource Handling Demo
AjaxStandard JSF-Ajax integration
Javascript API for Ajax
namespace : javax.faces (Open Ajax Alliance)
script: ajax.js
Ajax Requestjavax.faces.Ajax.ajaxRequest(element,event,options)
Include ajax.js
<h:commandButton id=”btn” value=”Submit” action=”#{itemController.newItem}”onclick=”javax.faces.Ajax.ajaxRequest(this,event, {execute:this.id, render:’comp1’})”></h:commandButton>
<h:outputScript name=”ajax.js” library=”javax.faces” target=”head” />
<h:outputAjaxScript target=”head” />
OR
Ajax and Custom Components
Include ajax.js with annotation
Or with ResourceHandler
@AjaxDependency(target=”head”)public class MyAjaxComponent extends UIInput {
}
ResourceHandler.createAjaxResource();
Ajax Demo
ConfigurationAnnotations instead of xml
<managed-bean> <managed-bean-name>createBookController</managed-bean-name> <managed-bean-class>
com.bla.bla.view.MyPojo</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope></managed-bean>
@ManagedBean(name=”myPojo”)@RequestScopedpublic class MyPojo {...
}
becomes
ConfigurationMore annotations
More soon...
@FacesComponent@FacesConverter@ManagedBean@ManagedBeans@ManagedProperty@FacesRenderer@FacesRenderKit@FacesValidator
Project StageProject environment settingSimilar to RAILS_ENVValues;
DevelopmentUnitTestSystemTestProduction (Default)
Project Stageweb.xml
JNDI
How to get it?
<context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param>
java:comp/env/jsf/ProjectStage
Application.getProjectStage()
Project Stage Demo
System EventsSubscription based, no queueing
A bit similar to PhaseEvent idea
Ingridients
System Events
System Event Listeners
Subscribers (Application or UIComponent)
System EventsApplication level system events
public abstract void subscribeToEvent(Class<? extends SystemEvent> systemEventClass, SystemEventListener listener);
public abstract void subscribeToEvent(Class<? extends SystemEvent> systemEventClass, Class sourceClass, SystemEventListener listener); public abstract void publishEvent(Class<? extends SystemEvent> systemEventClass, SystemEventListenerHolder source);
public void publishEvent(Class<? extends SystemEvent> systemEventClass, Class<?> sourceBaseType, Object source);
System EventsUIComponent level system events
public void subscribeToEvent(Class<? extends SystemEvent> eventClass, ComponentSystemEventListener componentListener);
public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass, ComponentSystemEventListener componentListener);
AfterAddToParentEventBeforeRenderEventViewMapCreatedEventViewMapDestroyedEvent
ComponentSystemEvent
System EventsListen with annotations
@ListenerFor(systemEventClass=AfterAddToParentEvent.class)public class MyComponent extends UIOutput {}
@ListenersFor({@ListenerFor(systemEventClass=AfterAddToParentEvent.class, @ListenerFor(systemEventClass=BeforeRenderEvent.class)})public class MyComponent extends UIOutput {}
ScopesViewScope
For managed beans
Component scope
Composition
Conversation scope
Not in yet, through webbeans?
Scopes - ViewScopeA new managed bean scope
Lives until view is changed
@ManagedBean(name=”myBean”)@ViewScopedpublic class MyBeanInViewScope {...}
Scopes Demo
PDLPage Declaration Language
Based on Facelets<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"><h:head> <title>JSF2Demo</title></h:head><h:body> <h:form> <h:outputText value="Hello" /> </h:form></h:body></html>
EZCompGreatly simplifies custom component development
Convention over configuration
Declarative composite components
Components without Java coding
Component scope in composition
EZCompPage that uses a composition component
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:jwug="http://java.sun.com/jsf/composite/jwug"><h:head> <title>EZComp Demo</title></h:head><h:body> <h:form> <jwug:greeting value=”Mr. Soprano” /> </h:form></h:body></html>
EZCompUnder %webroot%/resources/jwug/greeting.xhtml
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:composite="http://java.sun.com/jsf/composite"><body><composite:interface> <composite:attribute name="value" required="true" /></composite:interface><composite:implementation>
<h:outputText value=”Hello #{compositeComponent.attrs.value}” /></composite:implementation></body></html>
EZComp - SliderScriptaculous based slider
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:jwug="http://java.sun.com/jsf/composite/jwug"><h:head> <title>EZComp Demo</title></h:head><h:body> <h:form> <jwug:slider value=”#{demo.number}” min=”0” max=”100”/> </h:form></h:body></html>
EZComp - Slider<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:composite="http://java.sun.com/jsf/composite"><body>
<composite:interface> <composite:attribute name="id" required="true" /> <composite:attribute name="value" required="true" /> <composite:attribute name="min" required="false" /> <composite:attribute name="max" required="false" /></composite:interface><composite:implementation>
<h:outputScript name="prototype.js" library="script" target="head"/><h:outputScript name="scriptaculous.js" library="script" target="head"/>
<h:inputText id="sliderField" style="width:100px" value="#{compositeComponent.attrs.value}"></h:inputText> <div id="#{compositeComponent.clientId}_track" style="width:105px;background-color:#aaa;height:5px;"> <div id="#{compositeComponent.clientId}_handle" style="width:5px;height:10px;background-color:#f00;cursor:move;"></div>
</div> <script type="text/javascript">
var slider_#{compositeComponent.attrs.id} = new Control.Slider('#{compositeComponent.clientId}_handle','#{compositeComponent.clientId}_track',{range:$R(#{compositeComponent.attrs.min},#{compositeComponent.attrs.max})});
slider_#{compositeComponent.attrs.id}.options.onSlide = function(value){ $('#{compositeComponent.clientId}:sliderField').value = (value + '').split(".")[0];};</script>
</composite:implementation></body></html>
EZComp Slider Demo
Scripting JSFGroovy instead of Java
Zero deployment time
Reload faces-config
Scripted beans, renderers, validators and etc
From JSF 2.0 Issue TrackerOptimized state managementException HandlingBookmarksSelectItemsSkinningPartial validationSecuritymore...
MyFaces 2.0Being worked on...
JSF 2.0 branch created
Not to be late this time
Future of JSFMore component libraries
JSF in EE (WebBeans, Seam, Spring Faces ...)
More RIA integration (Flex, Ajax ...)
Tool support
More adaptation
ResourcesJSF 2.0 EG blog : http://blogs.jsfcentral.com/jsf2group
Ed Burns’s blog: http://weblogs.java.net/blog/edburns/
Ryan Lubke’s blog: http://blogs.sun.com/rlubke/
Jim Driscoll’s blog: http://weblogs.java.net/blog/driscoll/
JSR Page: http://jcp.org/en/jsr/detail?id=314
The End - Cheers!
http://cagataycivici.wordpress.com
cagatay@apache.org
PS3 Network id: FacesContext