Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
-
Upload
arun-gupta -
Category
Technology
-
view
1.283 -
download
1
Transcript of Spark IT 2011 - Simplified Web Development using Java Server Faces 2.0
<Insert Picture Here>
Java Server Faces 2.0
Arun Gupta, Java EE & GlassFish Guyblogs.sun.com/arungupta, @arungupta
2
The following/preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
5
Facelets
• Designed for JSF from beginning• XHTML + CSS
• Document validation
• Better error handling, including line numbers • Library prefixes as namespaces• EL directly in page:
• #{bean.propertyname}
• Templating made easy• ui:composition, ui:define, ui:insert• ui:include, ui:repeat
6
Facelets – Sample Code<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Enter Name & Password</title> </h:head> <h:body> <h1>Enter Name & Password</h1> <h:form> <h:panelGrid columns="2"> <h:outputText value="Name:"/> <h:inputText value="#{simplebean.name}" title="name" id="name" required="true"/> <h:outputText value="Password:"/> <h:inputText value="#{simplebean.password}" title="password" id="password" required="true"/> </h:panelGrid> <h:commandButton action="show" value="submit"/> </h:form> </h:body></html>
11
Composite Components
• Enable True Abstraction• Create a true, reusable, component from an
arbitrary region of a page• Built by composing other components
• “Using” and “Defining” page• Full support for using attached objects in
the using page• Action methods• Validators, etc
13
Composite Component – Sample Code<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Enter Name & Password</title> </h:head> <h:body> <h1>Enter Name & Password</h1> <h:form> <h:panelGrid columns="2"> <h:outputText value="Name:"/> <h:inputText value="#{simplebean.name}" title="name" id="name" required="true"/> <h:outputText value="Password:"/> <h:inputText value="#{simplebean.password}" title="password" id="password" required="true"/> </h:panelGrid> <h:commandButton action="show" value="submit"/> </h:form> </h:body></html>
14
Composite Components - Mapping<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:ez="http://java.sun.com/jsf/composite/ezcomp"> <h:head> <title>Enter Name & Password</title> </h:head> <h:body> <h1>Enter Name & Password</h1> <h:form> <ez:username-password/> <h:commandButton action="show" value="submit"/> </h:form> </h:body></html>
http://blogs.sun.com/arungupta/entry/totd_147_java_server_faces
. . .WEB-INFindex.xhtmlresources/ ezcomp/ username-password.xhtml
16
Integrated Ajax
• Inspiration – ADF, RichFaces, IceFaces, DynamicFaces
• Two entry points:• Declarative: <f:ajax> tag, uses
AjaxBehavior• Programmatic ajax
• resource library javax.faces• resource name jsf.js• JavaScript namespace jsf.ajax.
• jsf.ajax.request function
17
Integrated Ajax – Sample Code
<h:commandButton actionListener="#{sakilabean.findActors}" value="submit"> <f:ajax execute="length" render="actorTable totalActors"/></h:commandButton>
http://blogs.sun.com/arungupta/entry/totd_123_f_ajax_bean
19
Partial State Saving
• Inspired by Trinidad state saving• Save only the state that's changed since
creation of the component tree• Per-view state size up to 4X smaller• Default for pages written with Facelets• All standard components implement this
feature• Default for composite components
21
View Parameters
• Inspired by Page Parameters from Seam• Provides a declarative way to map request
parameters to EL-reachable location• <f:viewParam>, <f:metadata>
<f:metadata> <f:viewParam name="foo" value="#{bean.foo}"/></f:metadata>
page1.xhtml?foo=bar
bean.foo will equal “bar”
23
System Events
• Inspired by Solaris Dtrace, Linux strace, etc.
• Publish/Subscribe event bus for things that happen during the JSF Lifecycle
• Adds to event listening abilities• FacesEvent/FacesListener• PhaseEvent/PhaseListener• SystemEvent/SystemEventListener
25
System Events – Sample Code
<h:inputText> <f:event type="preValidate"
listener="#{bean.doSomePreValidation}"/> </h:inputText>
<h:inputText value="#{myBean.text}"> <f:event type="beforeRender" listener="#{myBean.beforeTextRender}"/></h:inputText>
27
Resources
• Standard way to serve image, JavaScripts, CSS, …• No need for separate Servlet or Filter• Logically related to components, treat them that
way
• @ResourceDependency or @ResourceDependencies on custom components
• Built in support for CSS, Image, JavaScript resources
• /resources or /META-INF/resources
28
Resource EL – Sample Code
• #{resource['<resource>']}• #{resource['<library>:<resource>']}
• Examples of use• <a href="#{resource['header.jpg']}" />• <h:graphicImage value="#{resource['corp:header.jpg']}" />
30
Behaviors
• A Behavior is an interface and invents a new type of “attached object” which takes part in decode/encode of a component
• 3 new behaviors – ClientBehavior, ClientBehaviorHolder, AjaxBehavior<h:commandLink onclick="return confirm('Really???')"/>
<h:commandLink> <foo:confirm message="Really???"/></h:commandLink>
31
Optional “faces-config.xml”
• <managed-bean> → @ManagedBean or @Named• Validator, Renderer, Listener, ...
• Default navigation rules – match a view on the disk• Conditional navigation@Named(“simplebean”)public class SimpleBean {. . .}
<h:commandButton action="show" value="submit"/>
32
Lot more features ...
• Annotations• Navigation• Exceptions• Validation• EL• Scopes• Project Stage
33
Annotations
• @ManagedBean• @*Scoped (Session, Request, etc)• @ManagedProperty• @FacesComponent• @FacesConverter• etc.• With implicit Navigation, may eliminate
need for faces-config.xml in many cases
34
Bookmarkable URLs
<h:link outcome="viewEntry" value="Link">
<f:param name="entry" value="#{aBean.entry}"/>
</h:link>
<a href="http://localhost:8080/myapp/viewEntry.xhtml?entry=entry1">Link</a>
35
EL (Expression Langauge)
• #{component}, #{cc} (composite component): get the “currently” processed component / composite component
• #{component.clientId}• #{component.messageList}
36
Validation
• Integration with JSR 303: Bean Validation• @NotEmpty String name;• default validator: javax.faces.Bean –
automatically applied to all input fields• Default-validator: hook up a validator for
all instances of EditableValueHolder• <f:validateBean>, <f:validateRequired>, <f:validateRegexp>
37
Project Stage
• Inspired by Rails• Development
• Better error reporting, debugging
• Production• Better performance
38
JSF 2.2http://jcp.org/en/jsr/detail?id=344
• Ease of development• cc:interface is optional• JSF lifecycle is CDI aware• Runtime configuration options change
• Support implementation of Portlet Bridge 2.0• Support for HTML5 features
• Forms, Heading/Section content model, ...
• New components like FileUpload and BackButton
NEW
39
References
• glassfish.org• oracle.com/goto/glassfish• blogs.sun.com/theaquarium• glassfish.org/roadmap• youtube.com/user/GlassFishVideos• Follow @glassfish