type=page
status=published
title=What Is Facelets?
next=jsf-facelets002.html
prev=jsf-facelets.html
~~~~~~
= What Is Facelets?


[[GIJTU]]

[[what-is-facelets]]
What Is Facelets?
-----------------

Facelets is a powerful but lightweight page declaration language that is
used to build JavaServer Faces views using HTML style templates and to
build component trees. Facelets features include the following:

* Use of XHTML for creating web pages
* Support for Facelets tag libraries in addition to JavaServer Faces and
JSTL tag libraries
* Support for the Expression Language (EL)
* Templating for components and pages

The advantages of Facelets for large-scale development projects include
the following:

* Support for code reuse through templating and composite components
* Functional extensibility of components and other server-side objects
through customization
* Faster compilation time
* Compile-time EL validation
* High-performance rendering

In short, the use of Facelets reduces the time and effort that needs to
be spent on development and deployment.

Facelets views are usually created as XHTML pages. JavaServer Faces
implementations support XHTML pages created in conformance with the
XHTML Transitional Document Type Definition (DTD), as listed at
`http://www.w3.org/TR/xhtml1/#a_dtd_XHTML-1.0-Transitional`. By
convention, web pages built with XHTML have an `.xhtml` extension.

JavaServer Faces technology supports various tag libraries to add
components to a web page. To support the JavaServer Faces tag library
mechanism, Facelets uses XML namespace declarations. link:#GJBOX[Table
8-1] lists the tag libraries supported by Facelets.

[[sthref29]][[GJBOX]]

*Table 8-1 Tag Libraries Supported by Facelets*

[width="99%",cols="25%,25%,10%,15%,20%"]
|=======================================================================
|*Tag Library*|*URI*|*Prefix*|*Example*|*Contents*
|JavaServer Faces Facelets Tag Library
|`http://xmlns.jcp.org/jsf/facelets` |`ui:` a|
`ui:component`

`ui:insert`

 |Tags for templating

|JavaServer Faces HTML Tag Library |`http://xmlns.jcp.org/jsf/html`
|`h:` a|
`h:head`

`h:body`

`h:outputText`

`h:inputText`

 |JavaServer Faces component tags for all `UIComponent` objects

|JavaServer Faces Core Tag Library |`http://xmlns.jcp.org/jsf/core`
|`f:` a|
`f:actionListener`

`f:attribute`

 |Tags for JavaServer Faces custom actions that are independent of any
particular render kit

|Pass-through Elements Tag Library |`http://xmlns.jcp.org/jsf` |`jsf:`
|`jsf:id` |Tags to support HTML5-friendly markup

|Pass-through Attributes Tag Library
|`http://xmlns.jcp.org/jsf/passthrough` |`p:` |`p:type` |Tags to support
HTML5-friendly markup

|Composite Component Tag Library |`http://xmlns.jcp.org/jsf/composite`
|`cc:` |`cc:interface` |Tags to support composite components

|JSTL Core Tag Library |`http://xmlns.jcp.org/jsp/jstl/core` |`c:` a|
`c:forEach`

`c:catch`

 |JSTL 1.2 Core Tags

|JSTL Functions Tag Library |`http://xmlns.jcp.org/jsp/jstl/functions`
|`fn:` a|
`fn:toUpperCase`

`fn:toLowerCase`

 |JSTL 1.2 Functions Tags
|=======================================================================


Facelets provides two namespaces to support HTML5-friendly markup. For
details, see link:jsf-facelets009.html#BABGECCJ[HTML5-Friendly Markup].

Facelets supports tags for composite components, for which you can
declare custom prefixes. For more information on composite components,
see link:jsf-facelets005.html#GIQZR[Composite Components].

The namespace prefixes shown in the table are conventional, not
mandatory. As is always the case when you declare an XML namespace, you
can specify any prefix in your Facelets page. For example, you can
declare the prefix for the composite component tag library as

[source,oac_no_warn]
----
xmlns:composite="http://java.sun.com/jsf/composite"
----

instead of as

[source,oac_no_warn]
----
xmlns:cc="http://java.sun.com/jsf/composite"
----

Based on the JavaServer Faces support for Expression Language (EL)
syntax, Facelets uses EL expressions to reference properties and methods
of managed beans. EL expressions can be used to bind component objects
or values to methods or properties of managed beans that are used as
backing beans. For more information on using EL expressions, see
link:jsf-develop001.html#BNAQP[Using the EL to Reference Managed Beans].
