Survey							
                            
		                
		                * Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Facelets
Çağatay Çivici
Apache MyFaces PMC
cagatay@apache.org
Çağatay Çivici
Apache MyFaces Project PMC Member
OpenLogic Expert Group Member
Sourceforge jsf-comp project developer
JSF Client Side Validators
Acegi Security Framework’s JSF Components
JFreeChart for JSF : JSF Chart Creator
FacesTrace: Visual Debugger of JSF
Agenda
JSF and JSP
Facelets
Jsfc and inline texts
Templating
Composition Components
EL Functions
JSTL Support
Custom Logic Tags
JSF and JSP
 JSP is the default view technology
 JSP tags refer to JSF components
 h:commandButton =
HtmlCommandButton
 Mixing them brings overhead because of two
different lifecycles
JSF and JSP (Advantages)
 JSP is well adopted, reduces learning
curve of JSF.
 Above is the only advantage
JSF and JSP (Disadvantages)
 JSP is created to generate dynamic
output not to create component trees
 Two different lifecycles (overhead)
 Content Interweaving Issues
JSF and JSP
JSF 1.1 - Initial request (e.g. index.jsf)
1.
2.
3.
4.
5.
6.
FacesServlet gets the request and JSF lifecycle begins
restoreState returns null and a new view is created (createView)
with view id = index.jsp (jsp is the default suffix)
lifecycle jumps to renderResponse
renderView is called that dispatches index.jsp to the container
Container traverses all the tags, tags call component’s encode
methods during component tree is created
State is saved via writeState and buffered output is rendered to
the client.
JSF 1.2 - a servletwrapper is used instead of f:view to
buffer the content and component tree is created before
rendering
Facelets
A viewhandler purely created for JSF
No more JSP
.xhtml instead of .jsp
No tld files and no tag classes to
defined a UIComponent
 Faster than using JSP&JSF
Migrating from JSP to Facelets
 <%@ taglib uri="http://java.sun.com/jsf/html"
prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core"
prefix="f"%>
 <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
Installation
 Add jsf-facelets.jar to the classpath
 Add viewhandler config to faces-config.xml
 Change javax.faces.DEFAULT_SUFFIX to .xhtml
*.taglib.xml
 Concept similar to tld but lightweight
 Used to define components,
converters, validators, composition
components, custom logic tags,
functions and etc.
Jsfc
 Jsfc : jwcid concepty in Tapestry
<h:commandButton id=“btn_save” value=“Save”
action=“#{bean.method}” />
<input jsfc="h:commandButton" type="submit"
id=“btn_save" value=“Save“ action=“#{bean.method}”/>
 Provides integration with HTML editors
Inline Texts
 Inline Text: Display texts without a
UIComponent
<h:outputText
value=“#{IndexPageBean.welcomeMessage}” />
<h1>#{IndexPageBean.welcomeMessage}</h1>
Support for Unified EL
 Facelets support the Unified EL
 #{BeanName.field} same as;
 ${BeanName.field}
Templating
 A template is an xhtml with placeholders
 Placeholders are marked with ui:insert
Fragment from Template.xhtml
<title>
<ui:insert name="title">Default Title</ui:insert>
</title>
 In order to use the template ui:composition is needed.
Fragment from index.xhtml
<ui:composition template="/template.xhtml">
<ui:define name="title">
Welcome to index page
</ui:define>
Composition Components
 Composition component is basically a template
 userInfo.xhtml
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets">
<h3>Logged as : #{user}</h3>
</ui:composition>
myfacelets.taglib.xml
<tag>
<tag-name>userInfo</tag-name>
<source>tags/userInfo.xhtml</source>
</tag>
Use as;
<ds:userInfo user="#{myBean.currentUser}"/>
EL Functions
 MyFunctions.java
public static String length(String name) {
if( name == null )
return null;
else
return String.valueOf( name.length() );
}
 myfacelets.taglib.xml
<function>
<function-name>length</function-name>
<function-class>faceletsbox.utils.CustomerUtils</function-class>
<function-signature>
java.lang.String length(java.lang.String)
</function-signature>
</function>
 Use as;
#{ds:length(MyBean.userName)}
JSTL Support
 With JSP, mixing JSF and JSTL is
problematic
 Facelets brings limited but faultless
support
<c:if>
<c:forEach>
<c:catch>
<c:set>
Custom logic tags
 JSTL like logic tags by extending
Facelets TagHandler
 myfacelets.taglib.xml
<tag>
<tag-name>if</tag-name>
<handler-class>mycompany.myproject.utils.IfHandler</handler-class>
</tag>
 Use as;
<ds:if test="#{MyBean.isLoggedIn}">
Welcome
</ds:if>
List of built-in Facelets tags
<ui:component/>
<ui:composition/>
<ui:debug/>
<ui:decorate/>
<ui:define/>
<ui:fragment/>
<ui:include/>
<ui:insert/>
<ui:param/>
<ui:remove/>
<ui:repeat/>
Summary
 Facelets saves JSF from the burden of
JSP
 Great for templating and composition
components plus bonuses like el
functions
 IDE support is not wide, only Exadel
support facelets for now
The End – Questions?
 cagatay@apache.org
 www.jroller.com/page/cagataycivici