blob: a9358d923efd519800e002606e8022003924f46a [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
Copyright 2009 Sun Microsystems, Inc. All rights reserved.
The contents of this file are subject to the terms of either the GNU
General Public License Version 2 only ("GPL") or the Common Development
and Distribution License("CDDL") (collectively, the "License"). You
may not use this file except in compliance with the License. You can obtain
a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific
language governing permissions and limitations under the License.
When distributing the software, include this License Header Notice in each
file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
Sun designates this particular file as subject to the "Classpath" exception
as provided by Sun in the GPL Version 2 section of the License file that
accompanied this code. If applicable, add the following below the License
Header, with the fields enclosed by brackets [] replaced by your own
identifying information: "Portions Copyrighted [year]
[name of copyright owner]"
Contributor(s):
If you wish your version of this file to be governed by only the CDDL or
only the GPL Version 2, indicate your decision by adding "[Contributor]
elects to include this software in this distribution under the [CDDL or GPL
Version 2] license." If you don't indicate a single choice of license, a
recipient has the option to distribute your version of this file under
either the CDDL, the GPL Version 2 or to extend the choice of license to
its licensees as provided above. However, if you add GPL Version 2 code
and therefore, elected the GPL Version 2 license, then the option applies
only if the new code is made subject to such option by the copyright
holder.
-->
<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
version="2.0">
<description>
&lt;/pre&gt;
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;The tags in this library add templating&amp;#8212;a powerful
view composition technique&amp;#8212;to JSF.
Templating is so useful that there are entire frameworks, such as Tiles
and SiteMesh, that are built
around the concept of templating. So what is templating, how can you
benefit from it, and how does
this tag library implement it?
&lt;/p&gt;
&lt;p&gt;If you've used JSP before, you've probably used &lt;code&gt;jsp:include&lt;/code&gt;.
The prototypical example for
&lt;code&gt;jsp:include&lt;/code&gt; is a header on each page in a web
application. One JSP page, say header.jsp,
encapsulates the header content, and the header is included by each
page. You &lt;em&gt;encapsulate and reuse
content&lt;/em&gt;, so that changes to one file, header.jsp, affect the
header on every page.
&lt;/p&gt;
&lt;p&gt;This tab library contains a tag&amp;#8212&lt;code&gt;ui:include&lt;/code&gt;&amp;#8212
that's analagous to &lt;code&gt;jsp:include&lt;/code&gt;,
but encapsulating and reusing content is only half the templating story,
because templating also lets you
&lt;em&gt;encapsulate and reuse &lt;b&gt;layout&lt;/b&gt;&lt;/em&gt;.
You define a single &lt;em&gt;template&lt;/em&gt; (meaning layout), and
you reuse
that template with multiple &lt;em&gt;compositions&lt;/em&gt;. So now
you can control the layout of many pages with a single
template (layout). Let's take a look at an example.
&lt;/p&gt;
&lt;h3&gt;A Templating Example&lt;/h3&gt;
&lt;p&gt;
First, we define a template:
&lt;/p&gt;
&lt;div class="syntax"&gt;&lt;div class="html4strict"
style="font-family: monospace;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div
class="de1"&gt;&lt;span class="sc0"&gt;&amp;lt;!DOCTYPE html PUBLIC
&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="re0"&gt;xmlns&lt;/span&gt;=&lt;span
class="st0"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; xmlns:&lt;span class="re0"&gt;ui&lt;/span&gt;=&lt;span
class="st0"&gt;&amp;quot;http://java.sun.com/jsf/facelets&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;head&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;link&lt;/span&gt;
&lt;span class="re0"&gt;href&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;styles.css&amp;quot;&lt;/span&gt;
&lt;span class="re0"&gt;rel&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt;
&lt;span class="re0"&gt;type&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;title&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:insert
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Default Title&lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:insert&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;/title&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/head&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;body&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:debug&lt;span
class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;div&lt;/span&gt;
&lt;span class="re0"&gt;class&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;heading&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:insert
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;heading&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/div&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;div&lt;/span&gt;
&lt;span class="re0"&gt;class&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:insert
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/div&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/body&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;/html&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;
In the preceeding listing, we've defined a layout, also known as a
template. That template uses the
&lt;code&gt;ui:insert&lt;/code&gt; tag to insert pieces of a page &amp;#8212namely,
title, heading, and content&amp;#8212
defined in a &lt;em&gt;composition&lt;/em&gt;. Notice that on line 8, we
define a default title, in case one isn't provided
by the composition. Also note that on line 12 we have the &lt;code&gt;ui:debug&lt;/code&gt;
tag, which lets the user activate
a popup window with debugging information by typing CTRL + Shift + d.
&lt;/p&gt;
&lt;p&gt;
The title, heading, and content pieces of the page referenced in the
template are defined in a separate XHTML
file in a composition, like this:
&lt;/p&gt;
&lt;div class="syntax"&gt;&lt;div class="html4strict"
style="font-family: monospace;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div
class="de1"&gt;&lt;span class="sc0"&gt;&amp;lt;!DOCTYPE html PUBLIC
&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="re0"&gt;xmlns&lt;/span&gt;=&lt;span
class="st0"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;xmlns:&lt;span
class="re0"&gt;ui&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;http://java.sun.com/jsf/facelets&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;body&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:composition
&lt;span class="re0"&gt;template&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;/layout.xhtml&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;A List of Contacts&lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;heading&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Contacts&lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:include
&lt;span class="re0"&gt;src&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;contactsTable.xhtml&amp;quot;&lt;/span&gt;
&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:composition&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/body&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;/html&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;
At runtime, JSF synthesizes the two previous XHTML pages to create a
single JSF view by inserting the
pieces defined in the composition into the template (that template is
layout.xhtml, which is the first
listing above). JSF also disregards everything outside of the &lt;code&gt;composition&lt;/code&gt;
tag so that we don't
wind up with two &lt;code&gt;body&lt;/code&gt; elements in the view.
Also, note that we use the &lt;code&gt;ui:include&lt;/code&gt;
tag on line 14 to include content (which happens to be a table) from
another XHTML page, so that we can reuse
that table in other views.
&lt;/p&gt;
&lt;p&gt;
So why do we have two XHTML pages to define a single view? Why not
simply take the pieces and manually insert
them into the layout so that we have only a single XHTML page? The
answer is simple: we have separated layout
from the content so that we can &lt;em&gt;reuse that layout&lt;/em&gt;
among multiple compositions. For example, now we can
define another composition that uses the same layout:
&lt;/p&gt;
&lt;div class="syntax"&gt;&lt;div class="html4strict"
style="font-family: monospace;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div
class="de1"&gt;&lt;span class="sc0"&gt;&amp;lt;!DOCTYPE html PUBLIC
&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="re0"&gt;xmlns&lt;/span&gt;=&lt;span
class="st0"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
xmlns:&lt;span class="re0"&gt;ui&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;http://java.sun.com/jsf/facelets&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;body&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:composition
&lt;span class="re0"&gt;template&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;/layout.xhtml&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Create a Contact&lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;heading&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Create Contact&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:include
&lt;span class="re0"&gt;src&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;createContactForm.xhtml&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:composition&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/body&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;/html&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;
By encapsulating the layout, we can reuse that layout among multiple
compositions. Just like
&lt;code&gt;ui:include&lt;/code&gt; lets us encapsulate and reuse
conent, JSF compositions let us encapsulate and reuse
layout, so that changes to a single layout can affect multiple views.
Fundamentally, that's what this
tag library is all about.
&lt;/p&gt;
&lt;/div&gt;
&lt;pre&gt;
</description>
<namespace>http://java.sun.com/jsf/facelets</namespace>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
This tag is the same as the &lt;code&gt;ui:composition&lt;/code&gt;,
except for two things:
JSF creates a component and adds it directly to the tree, and
there's no associated
template.
&lt;/p&gt;
&lt;p&gt;
Use this tag to create a component and specify a filename for the
component as either the source of a &lt;code&gt;ui:include&lt;/code&gt;,
or the source of a Facelets tag.
&lt;/p&gt;
&lt;/div&gt;
</description>
<tag-name>component</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.ComponentRefHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
The identifier of the component that JSF inserts into the
component tree. If an identifier is
not explicitly specified by the page author, JSF will assign an
identifier based on the algorithm
that it uses for all components.
&lt;/p&gt;
&lt;/div&gt;
</description>
<name>id</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
Binds the component to a backing bean property, as specified in
the JSF specification.
&lt;/p&gt;
&lt;/div&gt;
</description>
<name>binding</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
Defines a composition that optionally uses a template, as outlined
in the description of the ui tag library. Multiple
compositions can use the same template, thus encapsulating and
reusing layout. JSF disregards everything outside of the
composition, which lets developers embed compositions in well-formed
XHTML pages that can be viewed in an XHTML viewer,
such as Dreamweaver or a browser, without including extraneous
elements such as &lt;code&gt;head&lt;/code&gt; and &lt;code&gt;body&lt;/code&gt;.
&lt;/p&gt;
&lt;div class="syntax"&gt;&lt;div class="html4strict"
style="font-family: monospace;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div
class="de1"&gt;&lt;span class="sc0"&gt;&amp;lt;!DOCTYPE html PUBLIC
&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="re0"&gt;xmlns&lt;/span&gt;=&lt;span
class="st0"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;xmlns:&lt;span
class="re0"&gt;ui&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;http://java.sun.com/jsf/facelets&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;body&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;
THIS LINE, AND EVERYTHING ABOVE IT IS DISREGARDED BY JSF&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:composition
&lt;span class="re0"&gt;template&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;/layout.xhtml&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;#{msgs.contactsWindowTitle}&lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;heading&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;#{msgs.contactsHeading}&lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:define
&lt;span class="re0"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;ui&lt;/span&gt;:include
&lt;span class="re0"&gt;src&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;contactsTable.xhtml&amp;quot;&lt;/span&gt;
&lt;span class="re2"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:define&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;
&lt;span class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/ui&lt;/span&gt;:composition&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp;
THIS LINE, AND EVERYTHING BELOW IT IS DISREGARDED BY JSF&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &lt;span
class="sc3"&gt;&lt;span class="re1"&gt;&amp;lt;/body&lt;span
class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc3"&gt;&lt;span
class="re1"&gt;&amp;lt;/html&lt;span class="re2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
<tag-name>composition</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.CompositionHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
A URI that points to a template, also known as a layout, that
inserts pieces of the page defined in the composition.
&lt;/p&gt;
&lt;/div&gt;
</description>
<name>template</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
When the &lt;code&gt;ui:debug&lt;/code&gt; tag is placed in an XHTML
page, it creates a component and adds it to the
component tree. That debug component captures debugging information,
namely the current state of the component
tree and the scoped variables in the application, when the component
is rendered. If the user presses CTRL + SHIFT + d,
JSF opens a window that shows the debugging information captured by
the debug component.
&lt;/p&gt;
&lt;p&gt;
Typically, the best place to put the &lt;code&gt;ui:debug&lt;/code&gt;
tag is in an application's main template, which
lets developers enable or disable viewing of debugging information
in one central location. Additionally, page
authors can change the hotkey (which by default is CTRL + SHIFT + d,
where the d stands for debug) to CTRL + SHIFT + ?,
where ? represents the key specified as the value of the &lt;code&gt;hotkey&lt;/code&gt;
attribute.
&lt;/p&gt;
&lt;p&gt;
You can use the &lt;code&gt;rendered&lt;/code&gt; attribute to
control whether the debug component is rendered.
Using an EL expression as the value for the &lt;code&gt;rendered&lt;/code&gt;
attribute lets you control whether
debug output is enabled for multiple views based on a single bean
property.
&lt;/p&gt;
&lt;/div&gt;
</description>
<tag-name>debug</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.UIDebug</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
Defines a single character, that, pressed in conjunction with
CTRL and SHIFT, will display the JSF debug window.
By default, the hotkey is 'd'. &lt;em&gt;The value for the
hotkey attribute cannot be an EL expression.&lt;/em&gt;
&lt;/p&gt;
&lt;/div&gt;
</description>
<name>hotkey</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
Controls whether the debug component is rendered. Valid values
for this attribute are either the strings "true" or "false" or
an EL expression that evaluates to either "true" or "false".&lt;p&gt;If
this attribute's value is "false" or the value is an EL
expression that evaluates to "false", the debug component is not
rendered in the page, the hotkey attribute is disregarded, and
users cannot open the debugging information window with a
hotkey.&lt;/p&gt;
&lt;/p&gt;
&lt;/div&gt;
</description>
<name>rendered</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;The &lt;code&gt;define&lt;/code&gt; tag defines content
that is inserted into a page by a template. The &lt;code&gt;define&lt;/code&gt;
tag can be used inside &lt;code&gt;ui:composition&lt;/code&gt;, &lt;code&gt;ui:component&lt;/code&gt;,
&lt;code&gt;ui:decorate&lt;/code&gt;, and &lt;code&gt;ui:fragment&lt;/code&gt;
tags.&lt;/p&gt;
&lt;p&gt;Content defined by the &lt;code&gt;define&lt;/code&gt; tag
can be inserted into a page by using &lt;code&gt;ui:insert&lt;/code&gt;.
&lt;/p&gt;
&lt;/div&gt;
</description>
<tag-name>define</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.DefineHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;Assigns a name to the content inside a &lt;code&gt;define&lt;/code&gt;
tag. That name is used by corresponding &lt;code&gt;ui:insert&lt;/code&gt;
tags in a template that insert the named content into a page.&lt;/p&gt;
&lt;/div&gt;
</description>
<name>name</name>
<required>true</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;
The &lt;code&gt;decorate&lt;/code&gt; tag is identical to the &lt;code&gt;composition&lt;/code&gt;
tag, except that &lt;code&gt;ui:decorate&lt;/code&gt;, unlike &lt;code&gt;ui:composition&lt;/code&gt;,
does not disregard all content outside of the tag. The &lt;code&gt;decorate&lt;/code&gt;
is useful when you want to decorate some content in a page, for
example, you might want to decorate a list of items, like this:
&lt;div class="syntax"&gt;&lt;div class="html4strict"
style="font-family: monospace;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div
class="de1"&gt;
&lt;span class="sc2"&gt;&amp;lt;ui:decorate template=&lt;span
class="st0"&gt;&amp;quot;/layout.xhtml&amp;quot;&lt;/span&gt;&lt;span
class="kw2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &lt;span
class="sc2"&gt;&amp;lt;ui:define &lt;span class="kw3"&gt;name&lt;/span&gt;=&lt;span
class="st0"&gt;&amp;quot;listHeading&amp;quot;&lt;/span&gt;&lt;span
class="kw2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;
&lt;span class="sc2"&gt;&amp;lt;ui:include &lt;span class="kw3"&gt;src&lt;/span&gt;="shared/listHeading.xhtml"/&lt;span
class="kw2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &lt;span
class="sc2"&gt;&lt;span class="kw2"&gt;&amp;lt;&lt;/span&gt;/ui:define&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &lt;span
class="sc2"&gt;&amp;lt;c:forEach items="#&lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;items&lt;span
class="br0"&gt;&amp;#125;"&lt;/span&gt; var="item"&lt;span
class="kw2"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp;
...&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &lt;span
class="sc2"&gt;&lt;span class="kw2"&gt;&amp;lt;&lt;/span&gt;/c:forEach&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; ...&lt;/div&gt;&lt;/li&gt;
&lt;li class="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc2"&gt;&lt;span
class="kw2"&gt;&amp;lt;&lt;/span&gt;/ui:decorate&amp;gt;&lt;/span&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/p&gt;
Because JSF does not disregard everything outside of the &lt;code&gt;ui:decorate&lt;/code&gt;
tag, &lt;code&gt;ui:decorate&lt;/code&gt; can
be used to decorate pieces of a page.
&lt;/div&gt;
</description>
<tag-name>decorate</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.DecorateHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
A URI that points to a template, also known as a layout, that
inserts pieces of the page defined in the decorator.
&lt;/div&gt;
</description>
<name>template</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;The &lt;code&gt;fragment&lt;/code&gt; tag is identical to
the &lt;code&gt;component&lt;/code&gt; tag, except that &lt;code&gt;ui:fragment&lt;/code&gt;,
unlike &lt;code&gt;ui:component&lt;/code&gt;, JSF does not disregard
all content outside of the tag.&lt;/p&gt;
&lt;/div&gt;
</description>
<tag-name>fragment</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.ComponentRefHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
The identifier of the component that JSF inserts into the
component tree. If an identifier is
not explicitly specified by the page author, JSF will assign an
identifier based on the algorithm
that it uses for all components.
&lt;/div&gt;
</description>
<name>id</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
Binds the component to a backing bean property, as specified in
the JSF specification.
&lt;/div&gt;
</description>
<name>binding</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;Use this tag&amp;#8212which is very similar to JSP's &lt;code&gt;jsp:include&lt;/code&gt;&amp;#8212to
encapsulate and reuse content among
multiple XHTML pages. There are three things this tag can include:
plain XHTML, and XHTML pages that have either a &lt;code&gt;composition&lt;/code&gt;
tag or a &lt;code&gt;component&lt;/code&gt; tag.
&lt;/p&gt;
&lt;p&gt;You supply a filename, through &lt;code&gt;ui:include&lt;/code&gt;'s
&lt;code&gt;src&lt;/code&gt; attribute for JSF to include. That
filename is relative to the XHTML file that was rendered as a result
of the last request. So, for example, if JSF loaded
the view &lt;code&gt;login.xhtml&lt;/code&gt;, and that file
included &lt;code&gt;pageDecorations/header.xhtml&lt;/code&gt;, and
&lt;code&gt;
pageDecorations/header.xhtml&lt;/code&gt; included &lt;code&gt;companyLogo.xhtml&lt;/code&gt;,
then &lt;code&gt;companyLogo.xhtml&lt;/code&gt; will
not be found if it's in the &lt;code&gt;pageDecorations&lt;/code&gt;
directory, because &lt;code&gt;companyLogo.xhtml&lt;/code&gt; has to
be
in the same directory as &lt;code&gt;login.xhtml&lt;/code&gt;.
&lt;/p&gt;
&lt;/div&gt;
</description>
<tag-name>include</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.IncludeHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
The filename of an XHTML page to include. The filename is
relative to the XHTML page that was originally loaded.
&lt;/div&gt;
</description>
<name>src</name>
<required>true</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;Inserts content into a template. That content is defined&amp;#8212with
the &lt;code&gt;ui:define&lt;/code&gt; tag&amp;#8212 in either a
&lt;code&gt;ui:composition&lt;/code&gt;, &lt;code&gt;ui:component&lt;/code&gt;,
&lt;code&gt;ui:decorate&lt;/code&gt;, or &lt;code&gt;ui:fragment&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
</description>
<tag-name>insert</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.IncludeHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
The optional name attribute matches the associated &amp;lt;ui:define/&amp;gt;
tag in this template's client. If no name is specified, it's
expected
that the whole template client will be inserted.
&lt;/div&gt;
</description>
<name>name</name>
<required>false</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;Use this tag to pass parameters to an included file (using
&lt;code&gt;ui:include&lt;/code&gt;), or a template
(linked to either a composition or decorator). Embed &lt;code&gt;ui:param&lt;/code&gt;
tags in either &lt;code&gt;ui:include&lt;/code&gt;,
&lt;code&gt;ui:composition&lt;/code&gt;, or &lt;code&gt;ui:decorate&lt;/code&gt;
to pass the parameters.
&lt;/div&gt;
</description>
<tag-name>param</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.ParamHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
The name of the parameter.
&lt;/div&gt;
</description>
<name>name</name>
<required>true</required>
<type>java.lang.String</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
The value of the parameter. Notice that this attribute's value
can be an EL expression, which
means that you can pass objects to either an included file or a
template.
&lt;/div&gt;
</description>
<name>value</name>
<required>true</required>
<type>java.lang.String</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;Use this tag as an alternative to &lt;code&gt;h:dataTable&lt;/code&gt;
or
&lt;code&gt;c:forEach&lt;/code&gt;, especially when you are using
the
&lt;code&gt;jsfc&lt;/code&gt; feature of Facelets. You can specify
this component as
the value of the &lt;code&gt;jsfc&lt;/code&gt; attribute, like this:
&amp;lt;div... jsfc="ui:repeat" value="#{contacts}" var="contact"&amp;gt;...
&lt;/p&gt;
&lt;/div&gt;
</description>
<tag-name>repeat</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.RepeatHandler</handler-class>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;Read-write property setting the offset from the
beginning of the
collection from which to start the iteration. If not set, this
offset
is not considered and iteration will start at the beginning of
the
collection.&lt;/p&gt;
&lt;/div&gt;
</description>
<name>offset</name>
<required>false</required>
<type>int</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;Read-write property setting the size of the collection
to iterate.
If this value is less than the actual size of the collection, a
&lt;code&gt;FacesException&lt;/code&gt; must be thrown.&lt;/p&gt;
&lt;/div&gt;
</description>
<name>size</name>
<required>false</required>
<type>int</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;&lt;p&gt;Iteration
will only process every step items of the collection,
starting with the first one.&lt;/p&gt;&lt;/div&gt;
</description>
<name>step</name>
<required>false</required>
<type>int</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;The name of a collection of items that this tag
iterates over. The
collection may be a &lt;code&gt;List&lt;/code&gt;, &lt;code&gt;array&lt;/code&gt;,
&lt;code&gt;java.sql.ResultSet&lt;/code&gt;, or an individual
java Object. If the
collection is null, this tag does nothing.&lt;/p&gt;
&lt;/div&gt;
</description>
<name>value</name>
<required>true</required>
<type>java.lang.Object</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;&lt;p&gt;Name of the
exported scoped variable for the current item of the
iteration. This scoped variable has nested
visibility. Its type depends on the object of the
underlying collection&lt;/p&gt;&lt;/div&gt;
</description>
<name>var</name>
<required>true</required>
<type>java.lang.Object</type>
</attribute>
<attribute>
<description>
&lt;div class="changed_added_2_0"&gt;&lt;p&gt;Name of the
exported request scoped variable for the status of the
iteration. Object is a POJO with the following read-only
JavaBeans properties. This scoped variable has nested
visibility.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;begin&lt;/code&gt; of type Integer&lt;/p&gt;
&lt;p&gt;&lt;code&gt;end&lt;/code&gt; of type Integer&lt;/p&gt;
&lt;p&gt;&lt;code&gt;index&lt;/code&gt; of type int&lt;/p&gt;
&lt;p&gt;&lt;code&gt;step&lt;/code&gt; of type Integer&lt;/p&gt;
&lt;p&gt;&lt;code&gt;even&lt;/code&gt; of type boolean&lt;/p&gt;
&lt;p&gt;&lt;code&gt;odd&lt;/code&gt; of type boolean&lt;/p&gt;
&lt;p&gt;&lt;code&gt;first&lt;/code&gt; of type boolean&lt;/p&gt;
&lt;p&gt;&lt;code&gt;last&lt;/code&gt; of type boolean&lt;/p&gt;
&lt;/div&gt;
</description>
<name>varStatus</name>
<required>false</required>
<type>java.lang.Object</type>
</attribute>
</tag>
<tag>
<description>
&lt;div class="changed_added_2_0"&gt;
&lt;p&gt;Remove content from a page. This tag is often used in
conjunction with the &lt;code&gt;jsfc&lt;/code&gt; feature of
Facelets,
to wrap additional markup. When Facelets removes markup from a page
by substituting markup items that have
a &lt;code&gt;jsfc&lt;/code&gt; attribute with the specified
component, Facelets also removes anything in the page that
is contained in a &lt;code&gt;ui:remove&lt;/code&gt; tag.&lt;/p&gt;
&lt;/div&gt;
</description>
<tag-name>remove</tag-name>
<handler-class>com.sun.faces.facelets.tag.ui.SchemaCompliantRemoveHandler</handler-class>
</tag>
</facelet-taglib>