<?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>
        The core JavaServer Faces custom actions that are independent of
        any particular RenderKit.
    </description>
    <namespace>http://java.sun.com/jsf/core</namespace>
    <tag>
        <description>

            &lt;p&gt;Register an ActionListener instance on the
            UIComponent associated with the closest parent UIComponent
            custom action.&lt;/p&gt;
        </description>
        <tag-name>actionListener</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.ActionListenerHandler</handler-class>
        <attribute>
            <description>
                Fully qualified Java class name of an ActionListener to be
                created and registered.
            </description>
            <name>type</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Value binding expression that evaluates to an object that
                implements javax.faces.event.ActionListener.
            </description>
            <name>binding</name>
            <required>false</required>
            <type>javax.faces.event.ActionListener</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Add an attribute to the UIComponent associated with the closest
            parent UIComponent custom action.
        </description>
        <tag-name>attribute</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.AttributeHandler</handler-class>
        <attribute>
            <description>
                The name of the component attribute to be set.
            </description>
            <name>name</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The value of the component attribute to be set.
            </description>
            <name>value</name>
            <type>java.lang.Object</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Register a DateTimeConverter instance on the UIComponent associated
            with the closest parent UIComponent custom action.
        </description>
        <tag-name>convertDateTime</tag-name>
        <converter>
            <converter-id>javax.faces.DateTime</converter-id>
            <handler-class>com.sun.faces.facelets.tag.jsf.core.ConvertDateTimeHandler</handler-class>
        </converter>
        <attribute>
            <description>
                Predefined formatting style which determines how the date
                component of a date string is to be formatted and parsed.
                Applied only if type is "date" or "both". Valid values
                are "default", "short", "medium", "long", and "full".
                Default value is "default".
            </description>
            <name>dateStyle</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Locale whose predefined styles for dates and times are used
                during formatting or parsing. If not specified, the Locale
                returned by FacesContext.getViewRoot().getLocale() will be used.
                Value must be either a VB expression that evaluates to a
                java.util.Locale instance, or a String that is valid to pass as
                the first argument to the constructor java.util.Locale(String
                language, String country). The empty string is passed as the
                second argument.
            </description>
            <name>locale</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Custom formatting pattern which determines how the
                date/time string should be formatted and parsed.
            </description>
            <name>pattern</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Predefined formatting style which determines how the
                time component of a date string is to be formatted and
                parsed. Applied only if type is "time" or "both".
                Valid values are "default", "short", "medium", "long",
                and "full". Default value is "default".
            </description>
            <name>timeStyle</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Time zone in which to interpret any time information in the date
                String. Value must be either a VB expression that evaluates to
                a java.util.TimeZone instance, or a String that is a timezone ID
                as described in the javadocs for
                java.util.TimeZone.getTimeZone().
            </description>
            <name>timeZone</name>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Specifies what contents the string value will be
                formatted to include, or parsed expecting. Valid
                values are "date", "time", and "both". Default
                value is "date".
            </description>
            <name>type</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an instance of
                javax.faces.convert.DateTimeConverter.
            </description>
            <name>binding</name>
            <type>javax.faces.convert.DateTimeConverter</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Register a NumberConverter instance on the UIComponent associated
            with the closest parent UIComponent custom action.
        </description>
        <tag-name>convertNumber</tag-name>
         <converter>
            <converter-id>javax.faces.Number</converter-id>
            <handler-class>com.sun.faces.facelets.tag.jsf.core.ConvertNumberHandler</handler-class>
        </converter>
        <attribute>
            <description>
                ISO 4217 currency code, applied only when
                formatting currencies.
            </description>
            <name>currencyCode</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Currency symbol, applied only when formatting
                currencies.
            </description>
            <name>currencySymbol</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag specifying whether formatted output will
                contain grouping separators. Expressions must
                evaluate to a boolean. Default value
                is true.
            </description>
            <name>groupingUsed</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                Flag specifying whether only the integer part
                of the value will be formatted and parsed.
                Expressions must evaluate to a boolean.
                Default value is false.
            </description>
            <name>integerOnly</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>&lt;p&gt;

                &lt;span class="changed_modified_2_0"&gt;Locale&lt;/span&gt;
                whose
                predefined styles for numbers are used during formatting
                and parsing. If not specified, the Locale returned by
                FacesContext.getViewRoot().getLocale() will be used.
                Expressions must evaluate to a java.util.Locale &lt;span
                class="changed_modified_2_0"&gt;or a String that is valid to
                pass as the first argument to the constructor
                java.util.Locale(String language, String country). The
                empty string is passed as the second argument.&lt;/span&gt;

                &lt;/p&gt;</description>
            <name>locale</name>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Maximum number of digits that will be formatted
                in the fractional portion of the output. Expressions
                must evaluate to an int.
            </description>
            <name>maxFractionDigits</name>
            <type>java.lang.Integer</type>
        </attribute>
        <attribute>
            <description>
                Maximum number of digits that will be formatted
                in the integer portion of the output. Expressions
                must evaluate to an int.
            </description>
            <name>maxIntegerDigits</name>
            <type>java.lang.Integer</type>
        </attribute>
        <attribute>
            <description>
                Minimum number of digits that will be formatted
                in the fractional portion of the output. Expressions
                must evaluate to an int.
            </description>
            <name>minFractionDigits</name>
            <type>java.lang.Integer</type>
        </attribute>
        <attribute>
            <description>
                Minimum number of digits that will be formatted
                in the integer portion of the output. Expressions
                must evaluate to an int.
            </description>
            <name>minIntegerDigits</name>
            <type>java.lang.Integer</type>
        </attribute>
        <attribute>
            <description>
                Custom formatting pattern which determins how the
                number string should be formatted and parsed.
            </description>
            <name>pattern</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Specifies how the number string will be formatted
                and parsed. Valid values are "number", "currency",
                and "percent". Default value is "number".
            </description>
            <name>type</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an instance of
                javax.faces.convert.NumberConverter.
            </description>
            <name>binding</name>
            <type>javax.faces.convert.NumberConverter</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Register a named Converter instance on the UIComponent
            associated with the closest parent UIComponent custom action.
        </description>
        <tag-name>converter</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.ConvertDelegateHandler</handler-class>
        <attribute>
            <description>
                Converter identifier of the Converter instance to be
                created and registered.
            </description>
            <name>converterId</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an object that
                implements javax.faces.convert.Converter.
            </description>
            <name>binding</name>
            <type>javax.faces.convert.Converter</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>

            &lt;p class="changed_added_2_0"&gt;Register an AjaxBehavior instance
            on one or more
            UIComponents implementing the ClientBehaviorHolder interface. This
            tag
            may be nested witin a single component (enabling Ajax for a single
            component),
            or it may be "wrapped" around multiple components (enabling Ajax for
            many components).&lt;/p&gt;

        </description>
        <tag-name>ajax</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.AjaxHandler</handler-class>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A value of "true" indicates
                the
                AjaxBehavior should not be rendered. A value of "false"
                indicates
                the AjaxBehavior should be rendered. "false" is the default.&lt;/p&gt;

            </description>
            <name>disabled</name>
            <required>false</required>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A String identifying the type
                of event
                the Ajax action will apply to. If specified, it must be one of
                the
                events supported by the component the Ajax behavior is being
                applied to.
                For HTML components this would be the set of supported DOM
                events for the
                component, plus "action" for Faces ActionSource components and
                "valueChange"
                for Faces EditableValueHolder components. If not specified, the
                default
                event is determined for the component. The DOM event name is the
                actual DOM
                event name (for example: "click") as opposed to (for example:
                "onclick").&lt;/p&gt;

            </description>
            <name>event</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;Evaluates to Collection&lt;String&gt;.
                Identifiers of
                components that will participate in the "execute" portion of the
                Request
                Processing Lifecycle. If a literal is specified the identifiers
                must be space
                delimited. Any of the keywords "@this", "@form", "@all", "@none"
                may be specified
                in the identifier list.&lt;/p&gt;

            </description>
            <name>execute</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;If "true" behavior events
                generated from this behavior
                are broadcast during Apply Request Values phase. Otherwise, the
                events will be
                broadcast during Invoke Aplications phase&lt;/p&gt;

            </description>
            <name>immediate</name>
            <required>false</required>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;Method expression referencing
                a method
                that will be called when an AjaxBehaviorEvent has been
                broadcast for the listener.&lt;/p&gt;

            </description>
            <name>listener</name>
            <required>false</required>
            <method-signature>public void
                processAjaxBehavior(javax.faces.event.AjaxBehaviorEvent event)
                throws javax.faces.event.AbortProcessingException
            </method-signature>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;The name of the JavaScript
                function that will handle UI events.&lt;/p&gt;

            </description>
            <name>onevent</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;The name of the JavaScript
                function that will handle errors.&lt;/p&gt;

            </description>
            <name>onerror</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;Evaluates to Collection&lt;String&gt;.
                Identifiers of
                components that will participate in the "render" portion of the
                Request
                Processing Lifecycle. If a literal is specified the identifiers
                must be space
                delimited. Any of the keywords "@this", "@form", "@all", "@none"
                may be specified
                in the identifier list.&lt;/p&gt;

            </description>
            <name>render</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
    </tag>
    <tag>
        <description>

            &lt;p class="changed_added_2_0"&gt;Allow JSF page authors to
            install &lt;code&gt;ComponentSystemEventListener&lt;/code&gt;
            instances
            on a component in a page.&lt;/p&gt;

            &lt;div class="changed_added_2_0"&gt;

            &lt;p&gt;&lt;/p&gt;

            &lt;/div&gt;

        </description>
        <tag-name>event</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.EventHandler</handler-class>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;Name of the event for which
                to install a listener. The following table lists the
                valid values for this attribute, and the corresponding
                event type for which the listener action is
                registered.&lt;/p&gt;

                &lt;table border="1"&gt;
                &lt;tr&gt;

                &lt;th&gt;value for "&lt;code&gt;type&lt;/code&gt;" tag
                attribute&lt;/th&gt;

                &lt;th&gt;Type of event sent to listener method
                &lt;/th&gt;

                &lt;/tr&gt;

                &lt;tr&gt;

                &lt;td&gt;preRenderComponent
                &lt;/td&gt;

                &lt;td&gt;javax.faces.event.PreRenderComponentEvent
                &lt;/td&gt;

                &lt;/tr&gt;

                &lt;tr&gt;

                &lt;td&gt;PostAddToView
                &lt;/td&gt;

                &lt;td&gt;javax.faces.event.PostAddToViewEvent
                &lt;/td&gt;

                &lt;/tr&gt;

                &lt;tr&gt;

                &lt;td&gt;preValidate
                &lt;/td&gt;

                &lt;td&gt;javax.faces.event.PreValidateEvent
                &lt;/td&gt;

                &lt;/tr&gt;

                &lt;tr&gt;

                &lt;td&gt;postValidate
                &lt;/td&gt;

                &lt;td&gt;javax.faces.event.PostValidateEvent
                &lt;/td&gt;

                &lt;/tr&gt;

                &lt;/table&gt;

                &lt;div class="changed_added_2_0"&gt;

                &lt;p&gt;In addition to these values, the fully qualified class
                name of any
                java class that extends
                &lt;code&gt;javax.faces.event.ComponentSystemEvent&lt;/code&gt;
                may be used as the
                value of the "type" attribute.&lt;/p&gt;

                &lt;p&gt;Also, the &lt;code&gt;@javax.faces.event.NamedEvent&lt;/code&gt;
                annotation may
                be attached to any java class that extends
                &lt;code&gt;javax.faces.event.ComponentSystemEvent&lt;/code&gt;.
                This enables that
                event to be referenced from this attribute, as descibed in the
                javadocs
                for &lt;code&gt;@NamedEvent&lt;/code&gt;.&lt;/p&gt;

                &lt;/div&gt;


            </description>
            <name>type</name>
            <required>true</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                MethodExpression pointing to a method expression of
                that will be called when the listener's processEvent
                method would have been called.
            </description>
            <name>listener</name>
            <required>true</required>
            <method-signature>public void
                listener(javax.faces.event.ComponentSystemEvent event) throws
                javax.faces.event.AbortProcessingException
            </method-signature>
        </attribute>
    </tag>
    <tag>
        <description>

            &lt;p&gt;Register a named facet on the UIComponent associated with
            the closest parent UIComponent custom action.&lt;/p&gt;


        </description>
        <tag-name>facet</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.FacetHandler</handler-class>
        <attribute>
            <description>
                Name of the facet to be created.
            </description>
            <name>name</name>
            <required>true</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>

            &lt;p class="changed_added_2_0"&gt;Declare the metadata facet for
            this view. This must be a child of the
            &lt;code&gt;&amp;lt;f:view&amp;gt;&lt;/code&gt;. This tag must
            reside within the
            top level XHTML file for the given viewId, not in a
            template. The implementation must insure that the direct
            child of the facet is a &lt;code&gt;UIPanel&lt;/code&gt;, even if
            there
            is only one child of the facet. The implementation must set
            the id of the &lt;code&gt;UIPanel&lt;/code&gt; to be the value of
            the
            &lt;code&gt;UIViewRoot.METADATA_FACET_NAME&lt;/code&gt; symbolic
            constant.&lt;/p&gt;

            &lt;div class="changed_added_2_0"&gt;

            &lt;p&gt;The implementation must allow templating for this element
            according
            to the following pattern.&lt;/p&gt;

            &lt;p&gt;viewId XHTML page, page01.xhtml&lt;/p&gt;

            &lt;/div&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:composition
            template=&lt;span class="st0"&gt;&amp;quot;template.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; &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;metadata&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;
            &amp;nbsp; &lt;span class="sc2"&gt;&amp;lt;f:metadata&amp;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="sc2"&gt;&amp;lt;f:viewParam
            &lt;span class="kw3"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;id&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;
            &amp;nbsp; &lt;span class="sc2"&gt;&lt;span class="kw2"&gt;&amp;lt;&lt;/span&gt;/f:metadata&amp;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="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;
            &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;content&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; &amp;nbsp;
            &amp;nbsp; &amp;nbsp; &lt;span class="sc2"&gt;&lt;span class="kw2"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;&lt;/span&gt;The
            big news stories of the day&lt;span class="sc2"&gt;&lt;span
            class="kw2"&gt;&amp;lt;/h1&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;&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="li2"&gt;&lt;div class="de2"&gt;&lt;span class="sc2"&gt;&lt;span
            class="kw2"&gt;&amp;lt;&lt;/span&gt;/ui:composition&amp;gt;&lt;/span&gt;
            &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;

            &lt;div class="changed_added_2_0"&gt;
            &lt;p&gt;Note line 4. The page author must ensure that the
            &lt;code&gt;&amp;lt;f:metadata&amp;gt;&lt;/code&gt; element does not
            appear on a template or
            included page. It must reside on the root page that corresponds to
            the
            viewId.&lt;/p&gt;

            &lt;p&gt;The template page, template.xhtml&lt;/p&gt;

            &lt;/div&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;&lt;span
            class="kw2"&gt;&amp;lt;html&lt;/span&gt; xmlns=&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="li2"&gt;&lt;div class="de2"&gt;&amp;nbsp; &amp;nbsp;
            &amp;nbsp; xmlns:ui=&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;
            &amp;nbsp; xmlns:f=&lt;span class="st0"&gt;&amp;quot;http://java.sun.com/jsf/core&amp;quot;&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; xml:&lt;span class="kw3"&gt;lang&lt;/span&gt;=&lt;span
            class="st0"&gt;&amp;quot;en&amp;quot;&lt;/span&gt; &lt;span
            class="kw3"&gt;lang&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;en&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;&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;body&amp;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="sc2"&gt;&amp;lt;f:view&amp;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;/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="sc2"&gt;&amp;lt;ui:insert &lt;span
            class="kw3"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;metadata&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; &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="sc2"&gt;&lt;span class="kw2"&gt;&amp;lt;div&lt;/span&gt;
            &lt;span class="kw3"&gt;id&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;container&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; &amp;nbsp;
            &amp;nbsp; &amp;nbsp; &lt;span class="sc2"&gt;&amp;lt;ui:insert &lt;span
            class="kw3"&gt;name&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;content&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;&lt;span class="kw2"&gt;&amp;lt;/div&amp;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="sc2"&gt;&lt;span
            class="kw2"&gt;&amp;lt;&lt;/span&gt;/f:view&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;
            &lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sc2"&gt;&lt;span
            class="kw2"&gt;&amp;lt;/body&amp;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="sc2"&gt;&lt;span
            class="kw2"&gt;&amp;lt;/html&amp;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;The page author is not &lt;em&gt;required&lt;/em&gt; to use
            templating, but if
            they do, it must be done as shown above, (or with
            &lt;code&gt;&amp;lt;ui:include&amp;gt;&lt;/code&gt; in a similar
            manner).&lt;/p&gt;

            &lt;/div&gt;


        </description>
        <tag-name>metadata</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.MetadataHandler</handler-class>
    </tag>
    <tag>
        <description>
            Load a resource bundle localized for the Locale of the current
            view, and expose it as a java.util.Map in the request attributes
            of the current request under the key specified by the value of the
            "var" attribute of this tag. The Map must behave such that if a
            get() call is made for a key that does not exist in the Map, the
            literal string ???KEY??? is returned from the Map, where KEY is
            the key being looked up in the Map, instead of a
            MissingResourceException being thrown. If the ResourceBundle does
            not exist, a JspException must be thrown.
        </description>
        <tag-name>loadBundle</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.LoadBundleHandler</handler-class>
        <attribute>
            <description>
                Base name of the resource bundle
                to be loaded.
            </description>
            <name>basename</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Name of a request scope attribute under which
                the resource bundle will be exposed as a Map.
            </description>
            <name>var</name>
            <required>true</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Add a child UIParameter component to the UIComponent
            associated with the closest parent UIComponent custom
            action.
        </description>
        <tag-name>param</tag-name>
        <component>
            <component-type>javax.faces.Parameter</component-type>
            <renderer-type/>
        </component>
        <attribute>
            <description>
                ValueExpression to a backing bean
                property bound to the component instance for
                the UIComponent created by this custom action.
            </description>
            <name>binding</name>
            <type>javax.faces.component.UIComponent</type>
        </attribute>
        <attribute>
            <description>
                Component identifier of the UIParameter component
                to be created.
            </description>
            <name>id</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Name of the parameter to be created.
            </description>
            <name>name</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Value of the parameter to be set.
            </description>
            <name>value</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                RELEASE_PENDING
                - Also update spec for bookmarkable URL (don't forget the two
                sources for include-view-params).
                - convey precendence feature using non-normative language
                vs algorithmic
                Flag enabling or disabling the inclusion of the parameter
            </description>
            <name>disable</name>
            <type>boolean</type>
        </attribute>
    </tag>
    <tag>
        <description>

            &lt;p class="changed_added_2_0"&gt;Used inside of the metada facet
            of a view, this tag causes a &lt;a target="_"
            href="../../../javadocs/javax/faces/component/UIViewParameter.html"&gt;UIViewParameter&lt;/a&gt;
            to be attached as metadata for the current view. Because
            &lt;code&gt;UIViewParameter&lt;/code&gt; extends &lt;code&gt;UIInput&lt;/code&gt;
            all of the attributes and nested child content for any
            &lt;code&gt;UIInput&lt;/code&gt; tags are valid on this tag as well.&lt;/p&gt;

        </description>
        <tag-name>viewParam</tag-name>
        <component>
            <component-type>javax.faces.Parameter</component-type>
            <renderer-type/>
        </component>
        <attribute>
            <description>
                The name of the request parameter from which the value for this component
                is retrieved on an initial request or to override the stored value on a
                postback.
            </description>
            <name>name</name>
            <required>true</required>
            <type>java.lang.String</type>
        </attribute>

        <attribute>
            <description>
                Converter instance registered with this component.
            </description>
            <name>converter</name>
            <required>false</required>
            <type>javax.faces.convert.Converter</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression enabled attribute that, if present, will be
                used as the text of the converter message, replacing any message
                that comes from the converter.
            </description>
            <name>converterMessage</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The component identifier for this component. This value must be
                unique within the closest parent component that is a naming
                container.
            </description>
            <name>id</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that the user is required to provide a submitted
                value for this input component.
            </description>
            <name>required</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression enabled attribute that, if present, will be
                used as the text of the validation message for the "required"
                facility, if the "required" facility is used.
            </description>
            <name>requiredMessage</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                MethodExpression representing a validator method that will be
                called
                during Process Validations to perform correctness checks on the
                value of this component. The expression must evaluate to a
                public
                method that takes FacesContext, UIComponent, and Object
                parameters,
                with a return type of void.
            </description>
            <name>validator</name>
            <required>false</required>
            <method-signature>void validate(javax.faces.context.FacesContext,
                javax.faces.component.UIComponent, java.lang.Object)
            </method-signature>
        </attribute>
        <attribute>
            <description>
                A ValueExpression enabled attribute that, if present, will be
                used as the text of the validator message, replacing any
                message that comes from the validator.
            </description>
            <name>validatorMessage</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression to which the value of the request parameter, as
                determined by the name attribute, is bound. The resolved value of this
                expression is used when encoding the view parameter into a bookmarkable link or
                redirect URL with view parameter encoding enabled. If this attribute is omitted,
                the value of the request parameter will instead be the local value of the
                UIViewParameter.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                &lt;p&gt;

                MethodExpression representing a value change listener method
                that will be notified when a new value has been set for this
                input component. The expression must evaluate to a public
                method that takes a &lt;code&gt;ValueChangeEvent&lt;/code&gt;
                parameter,
                with a return type of void, &lt;span class="changed_added_2_0"&gt;or
                to a public method that takes no arguments with a return type
                of void. In the latter case, the method has no way of easily
                knowing what the new value is, but this can be useful in cases
                where a notification is needed that "this value
                changed".&lt;/span&gt;

                &lt;/p&gt;
            </description>
            <name>valueChangeListener</name>
            <required>false</required>
            <method-signature>void
                valueChange(javax.faces.event.ValueChangeEvent)
            </method-signature>
        </attribute>
        <attribute>
            <description>
                The maximum number of characters that may
                be entered in this field.
            </description>
            <name>maxlength</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                The ValueExpression linking this component to a property in a
                backing bean
            </description>
            <name>binding</name>
            <required>false</required>
            <type>javax.faces.component.UIComponent</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Register a PhaseListener instance on the UIViewRoot in which
            this tag is nested.
        </description>
        <tag-name>phaseListener</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.PhaseListenerHandler</handler-class>
        <attribute>
            <description>
                Fully qualified Java class name of an PhaseListener to be
                created and registered.
            </description>
            <name>type</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Value binding expression that evaluates to an object that
                implements javax.faces.event.PhaseListener.
            </description>
            <name>binding</name>
            <required>false</required>
            <type>javax.faces.event.PhaseListener</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Add a child UISelectItem component to the UIComponent
            associated with the closest parent UIComponent custom
            action.
        </description>
        <tag-name>selectItem</tag-name>
        <component>
            <component-type>javax.faces.SelectItem</component-type>
            <renderer-type/>
        </component>
        <attribute>
            <description>
                Value binding expression to a backing bean
                property bound to the component instance for
                the UIComponent created by this custom action.
            </description>
            <name>binding</name>
            <type>javax.faces.component.UIComponent</type>
        </attribute>
        <attribute>
            <description>
                Component identifier of the UISelectItem
                component to be created.
            </description>
            <name>id</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Description of this option, for use in
                development tools.
            </description>
            <name>itemDescription</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether the option created
                by this component is disabled. Expressions
                must evaluate to a boolean. Default value
                is false.
            </description>
            <name>itemDisabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                Label to be displayed to the user
                for this option.
            </description>
            <name>itemLabel</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that characters that are sensitive in
                the value of the &lt;code&gt;itemLabel&lt;/code&gt;
                attribute must be escaped. This flag is set to "true" by
                default.
            </description>
            <name>escape</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Value to be returned to the server if this
                option is selected by the user.
            </description>
            <name>itemValue</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Value binding expression pointing at a
                SelectItem instance containing the
                information for this option.
            </description>
            <name>value</name>
            <type>javax.faces.model.SelectItem</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether the option created by this
                component represents the special "no selection"
                option. Expressions must evaluate to a boolean.
                Default value is false.
            </description>
            <name>noSelectionOption</name>
            <type>java.lang.Boolean</type>
        </attribute>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span class="changed_modified_2_0"&gt;Add&lt;/span&gt; a
            child UISelectItems component to the UIComponent associated
            with the closed parent UIComponent custom action.&lt;/p&gt;

            &lt;p class="changed_modified_2_0"&gt;When iterating over the
            select items, &lt;code&gt;toString()&lt;/code&gt; mest be called on
            the
            string rendered attribute values.&lt;/p&gt;

            &lt;p class="changed_added_2_0"&gt;Version 2 of the specification
            introduces
            several new attributes, described below. These are: var, itemValue,
            itemLabel, itemDescription, itemDisabled, and itemLabelEscaped.&lt;/p&gt;


        </description>
        <tag-name>selectItems</tag-name>
        <component>
            <component-type>javax.faces.SelectItems</component-type>
            <renderer-type/>
        </component>
        <attribute>
            <description>
                Value binding expression to a backing bean
                property bound to the component instance for
                the UIComponent created by this custom action.
            </description>
            <name>binding</name>
            <type>javax.faces.component.UIComponent</type>
        </attribute>
        <attribute>
            <description>
                Component identifier of the UISelectItems
                component to be created.
            </description>
            <name>id</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>


                &lt;p&gt;Value expression pointing at &lt;span
                class="changed_modified_2_0"&gt;any &lt;code&gt;Collection&lt;/code&gt;
                or array.&lt;/span&gt; The member elements may be instances of
                &lt;code&gt;SelectItem&lt;/code&gt; &lt;span
                class="changed_added_2_0"&gt;or any Java Object. In the
                case where the member elements are plain Java Objects,
                several additional attributes must be used by the page
                author to correctly identify the data to the enclosing
                &lt;code&gt;UISelectOne&lt;/code&gt; or &lt;code&gt;UISelectMany&lt;/code&gt;
                component, as shown in the following example.&lt;/span&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="sc2"&gt;&amp;lt;h:selectOneListbox
                &lt;span class="kw3"&gt;size&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;
                &lt;span class="kw3"&gt;id&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;escape02&amp;quot;&lt;/span&gt;
                &lt;span class="kw3"&gt;value&lt;/span&gt;=&lt;span class="st0"&gt;&amp;quot;#{select05NoSelection.initialCollectionValues}&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;f:selectItems &lt;span class="kw3"&gt;value&lt;/span&gt;=&lt;span
                class="st0"&gt;&amp;quot;#{select05NoSelection.hobbitList}&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; &amp;nbsp; &amp;nbsp;
                &amp;nbsp;var=&lt;span class="st0"&gt;&amp;quot;n&amp;quot;&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; &amp;nbsp; &amp;nbsp; &amp;nbsp;
                &amp;nbsp;itemValue=&lt;span class="st0"&gt;&amp;quot;#{n}&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; &amp;nbsp; &amp;nbsp;
                &amp;nbsp;itemLabel=&lt;span class="st0"&gt;&amp;quot;#{n.bio}&amp;quot;&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; &amp;nbsp; &amp;nbsp; &amp;nbsp;
                &amp;nbsp;itemDescription=&lt;span class="st0"&gt;&amp;quot;#{n.description}&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; &amp;nbsp; &amp;nbsp;
                &amp;nbsp;itemDisabled=&lt;span class="st0"&gt;&amp;quot;#{n.disabled}&amp;quot;&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; &amp;nbsp; &amp;nbsp; &amp;nbsp;
                &amp;nbsp;itemLabelEscaped=&lt;span class="st0"&gt;&amp;quot;true&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; &amp;nbsp; &amp;nbsp;
                &amp;nbsp;noSelectionValue=&lt;span class="st0"&gt;&amp;quot;#{select05NoSelection.hobbitList[0]}&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;&lt;span
                class="sc2"&gt;&lt;span class="kw2"&gt;&amp;lt;&lt;/span&gt;/h:selectOneListbox&amp;gt;&lt;/span&gt;
                &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;

                &lt;p class="changed_added_2_0"&gt;In the preceding example, the
                &lt;code&gt;value&lt;/code&gt; attribute on line 1 points to a
                &lt;code&gt;Collection&amp;lt;HobbitBean&amp;gt;&lt;/code&gt;.
                &lt;code&gt;HobbitBean&lt;/code&gt; is
                just a regular Java Object (POJO) that conforms to JavaBeans
                naming
                conventions for its properties. The &lt;code&gt;value&lt;/code&gt;
                attribute on
                line 2 points to a &lt;code&gt;List&amp;lt;HobbitBean&amp;gt;&lt;/code&gt;,
                though it could
                just as well point to a &lt;code&gt;Collection&lt;/code&gt;,
                array, or
                &lt;code&gt;javax.faces.model.DataModel&lt;/code&gt;. The
                attributes on lines 3
                through 9, inclusive, leverage the fact that the value is a
                collection
                of POJOs.
                &lt;/p&gt;


                &lt;/p&gt;


            </description>
            <name>value</name>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>


                &lt;p class="changed_added_2_0"&gt;Expose the value from the
                &lt;code&gt;value&lt;/code&gt; attribute under this request
                scoped key so that it
                may be referred to in EL for the value of other attributes.&lt;/p&gt;


            </description>
            <name>var</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;evaluates to a
                &lt;code&gt;Collection&lt;/code&gt;, array, or &lt;code&gt;Map&lt;/code&gt;
                from which the items
                to be shown will be rendered.&lt;/p&gt;

            </description>
            <name>itemValue</name>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;evaluates to a String that
                will
                serve as the label to be shown for the item.&lt;/p&gt;

            </description>
            <name>itemLabel</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>


                &lt;p class="changed_added_2_0"&gt;evaluates to a String that
                will
                serve as the description to be shown for the item.&lt;/p&gt;

            </description>
            <name>itemDescription</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;evaluates to a boolean that
                will
                determine if the item value is selectable or not.&lt;/p&gt;

            </description>
            <name>itemDisabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;evaluates to a boolean that
                will
                determine if the rendered markup for the item receives normal
                JSF HTML escaping or not.&lt;/p&gt;

            </description>
            <name>itemLabelEscaped</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;Is either an EL expression
                pointing to the element in the value collection whose value
                should be
                marked as a &amp;#8220;no selection&amp;#8221; item, or a
                literal string that
                exactly matches the value of the item in the collection that
                must be
                marked as the &amp;#8220;no selection&amp;#8221; item. If the
                user selects such
                an item &lt;strong&gt;and&lt;/strong&gt; the field is marked as
                required, then it
                will not pass validation.&lt;/p&gt;

            </description>
            <name>itemLabelEscaped</name>
            <type>java.lang.Boolean</type>
        </attribute>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Register an ActionListener instance on the UIComponent
            associated with the closest parent UIComponent custom action.
            This actionListener will cause the value given by the "value"
            attribute to be set into the ValueExpression given by the "target"
            attribute.&lt;/p&gt;

            &lt;p&gt;The implementation of this tag creates a special
            &lt;code&gt;ActionListener&lt;/code&gt; instance and registers it on
            the
            &lt;code&gt;ActionSource&lt;/code&gt; associated with our most
            immediate surrounding
            instance of a tag whose implementation class is a subclass of
            &lt;code&gt;UIComponentTag&lt;/code&gt;. This tag creates no output
            to the page
            currently being created.&lt;/p&gt;

            &lt;p&gt;The &lt;code&gt;ActionListener&lt;/code&gt; instance
            created and installed by
            this tag has the following behavior and contract.&lt;/p&gt;

            &lt;ul&gt;

            &lt;li&gt;Only create and register the &lt;code&gt;ActionListener&lt;/code&gt;
            instance
            the first time the component for this tag is created&lt;/li&gt;

            &lt;li&gt;The "target" and "value" tag attributes are
            ValueExpression
            instances and are stored unevaluated as instance variables of the
            listener.&lt;/li&gt;

            &lt;li&gt;When the listener executes, perform the following:
            &lt;ul&gt;
            Call getValue() on the "value" ValueExpression.
            &lt;/ul&gt;
            &lt;ul&gt;
            If value of the "value" expression is null, call setValue() on
            the "target" ValueExpression with the null value.
            &lt;/ul&gt;
            &lt;ul&gt;
            If the value of the "value" expression is not null, call getType()
            on the "value" and "target" ValueExpressions to determine their
            property types.
            &lt;/ul&gt;
            &lt;ul&gt;
            Coerce the value of the "value" expression to the "target"
            expression value type following the Expression Language coercion
            rules. Call setValue() on the "target" ValueExpression with the
            resulting value.
            &lt;/ul&gt;
            &lt;ul&gt;
            If either coercion or the execution of setValue() fails throw an
            AbortProcessingException.
            &lt;/ul&gt;
            &lt;/li&gt;

            &lt;/ul&gt;
        </description>
        <tag-name>setPropertyActionListener</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.SetPropertyActionListenerHandler</handler-class>
        <attribute>
            <description>
                ValueExpression to be stored as the value of the target
                attribute.
            </description>
            <name>value</name>
            <required>true</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                ValueExpression that is the destination of the value
                attribute.
            </description>
            <name>target</name>
            <required>true</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Container action for all JavaServer Faces core and
            custom component actions used on a nested page via
            "jsp:include" or any custom action that dynamically
            includes another page from the same web application,
            such as JSTL's "c:import".
        </description>
        <tag-name>subview</tag-name>
        <component>
            <component-type>javax.faces.NamingContainer</component-type>
            <renderer-type/>
        </component>
        <attribute>
            <description>
                Value binding expression to a backing bean
                property bound to the component instance for
                the UIComponent created by this custom action.
            </description>
            <name>binding</name>
            <type>javax.faces.component.UIComponent</type>
        </attribute>
        <attribute>
            <description>
                Component identifier of the UINamingContainer
                component to be created.
            </description>
            <name>id</name>
            <required>true</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether this component (and its
                children) should be rendered. Expressions must
                evaluate to a boolean.
            </description>
            <name>rendered</name>
            <type>java.lang.Boolean</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Register a DoubleRangeValidator instance on the
            UIComponent associated with the closest parent
            UIComponent custom action.
        </description>
        <tag-name>validateDoubleRange</tag-name>
        <validator>
            <validator-id>javax.faces.DoubleRange</validator-id>
            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
        </validator>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A boolean value
                enabling page level determination of whether or not this
                validator is enabled on the enclosing component.&lt;/p&gt;


            </description>
            <name>disabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                Maximum value allowed for this component.
            </description>
            <name>maximum</name>
            <type>java.lang.Double</type>
        </attribute>
        <attribute>
            <description>
                Minimum value allowed for this component.
            </description>
            <name>minimum</name>
            <type>java.lang.Double</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an instance of
                DoubleRangeValidator.
            </description>
            <name>binding</name>
            <type>javax.faces.validator.DoubleRangeValidator</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Register a LengthValidator instance on the
            UIComponent associated with the closest parent
            UIComponent custom action.
        </description>
        <tag-name>validateLength</tag-name>
        <validator>
            <validator-id>javax.faces.Length</validator-id>
            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
        </validator>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A boolean value
                enabling page level determination of whether or not this
                validator is enabled on the enclosing component.&lt;/p&gt;


            </description>
            <name>disabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                Maximum length allowed for this component.
            </description>
            <name>maximum</name>
            <type>java.lang.Integer</type>
        </attribute>
        <attribute>
            <description>
                Minimum length allowed for this component.
            </description>
            <name>minimum</name>
            <type>java.lang.Integer</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an instance of
                LenghtValidator.
            </description>
            <name>binding</name>
            <type>javax.faces.validator.LengthValidator</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Register a LongRangeValidator instance on the
            UIComponent associated with the closest parent
            UIComponent custom action.
        </description>
        <tag-name>validateLongRange</tag-name>
        <validator>
            <validator-id>javax.faces.LongRange</validator-id>
            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
        </validator>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A boolean value
                enabling page level determination of whether or not this
                validator is enabled on the enclosing component.&lt;/p&gt;


            </description>
            <name>disabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                Maximum value allowed for this component.
            </description>
            <name>maximum</name>
            <type>java.lang.Long</type>
        </attribute>
        <attribute>
            <description>
                Minimum value allowed for this component.
            </description>
            <name>minimum</name>
            <type>java.lang.Long</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an instance of
                LongRangeValidator.
            </description>
            <name>binding</name>
            <type>javax.faces.validator.LongRangeValidator</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>&lt;p&gt;

            &lt;span class="changed_added_2_0"&gt;
            A validator that delegates the validation of the local value
            to the Bean Validation API. The validationGroups attribute
            serves as a filter that instructs the Bean Validation API which
            contraints to enforce. If there are any constraint violations
            reported by Bean Validation, the value is considered invalid.

            &lt;/p&gt;
        </description>
        <tag-name>validateBean</tag-name>
        <validator>
            <validator-id>javax.faces.Bean</validator-id>
            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
        </validator>
        <attribute>
            <description>
                A comma-separated list of validation groups. A validation group
                is a fully-qualified class name.
            </description>
            <name>validationGroups</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A boolean value
                enabling page level determination of whether or not this
                validator is enabled on the enclosing component.&lt;/p&gt;


            </description>
            <name>disabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an instance of
                BeanValidator.
            </description>
            <name>binding</name>
            <type>javax.faces.validator.BeanValidator</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>&lt;p&gt;

            &lt;span class="changed_added_2_0"&gt;
            A validator that uses the pattern attribute to validate the
            wrapping component. The entire pattern is matched against
            the String value of the component. If it matches, it's
            valid.

            &lt;/p&gt;
        </description>
        <tag-name>validateRegex</tag-name>
        <validator>
            <validator-id>javax.faces.RegularExpression</validator-id>
            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
        </validator>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A boolean value
                enabling page level determination of whether or not this
                validator is enabled on the enclosing component.&lt;/p&gt;


            </description>
            <name>disabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                A regular expression pattern. Remember that, like in
                all Java strings, backslash must be escaped with another
                backslash.
            </description>
            <name>pattern</name>
            <required>true</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an instance of
                RegexpValidator.
            </description>
            <name>binding</name>
            <type>javax.faces.validator.RegexValidator</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>

            &lt;p class="changed_added_2_0"&gt;A validator that enforces
            the presence of a value. It has the same affect as setting the
            required attribute on a UIInput to true.&lt;/p&gt;

        </description>
        <tag-name>validateRequired</tag-name>
        <validator>
            <validator-id>javax.faces.Required</validator-id>
            <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
        </validator>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A boolean value
                enabling page level determination of whether or not this
                validator is enabled on the enclosing component.&lt;/p&gt;


            </description>
            <name>disabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an instance of
                RequiredValidator.
            </description>
            <name>binding</name>
            <type>javax.faces.validator.RequiredValidator</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>

            &lt;p&gt;&lt;span class="changed_modified_2_0"&gt;Register&lt;/span&gt;
            a named
            Validator instance on the UIComponent associated with the
            closest parent UIComponent custom action.&lt;/p&gt;

            &lt;div class="changed_added_2_0"&gt;

            &lt;p&gt;Usage outside of an &lt;code&gt;EditableValueHolder&lt;/code&gt;
            parent&lt;/p&gt;

            &lt;p&gt;If this element is nested within a
            &lt;code&gt;UIComponent&lt;/code&gt; tag that has other
            &lt;code&gt;UIComponent&lt;/code&gt; children, the validator will be
            automatically added to all the child components as well as
            this one. The implementation must ensure this occurs even if
            the parent of this element is not an instance of
            &lt;code&gt;EditableValueHolder&lt;/code&gt;.&lt;/p&gt;

            &lt;/div&gt;

        </description>
        <tag-name>validator</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.ValidateDelegateHandler</handler-class>
        <attribute>
            <description>
                &lt;p class="changed_added_2_0"&gt;A boolean value
                enabling page level determination of whether or not this
                validator is enabled on the enclosing component.&lt;/p&gt;


            </description>
            <name>disabled</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                Validator identifier of the Validator
                to be created and registered.
            </description>
            <name>validatorId</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A ValueExpression that evaluates to an object that implements
                the javax.faces.validator.Validator interface.
            </description>
            <name>binding</name>
            <type>javax.faces.validator.Validator</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Register a ValueChangeListener instance on the UIComponent
            associated with the closest parent UIComponent custom
            action.
        </description>
        <tag-name>valueChangeListener</tag-name>
        <handler-class>com.sun.faces.facelets.tag.jsf.core.ValueChangeListenerHandler</handler-class>
        <attribute>
            <description>
                Fully qualified Java class name of a
                ValueChangeListener to be created and registered.
            </description>
            <name>type</name>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Value binding expression that evaluates to an object that
                implements javax.faces.event.ValueChangeListener.
            </description>
            <name>binding</name>
            <required>false</required>
            <type>javax.faces.event.ValueChangeListener</type>
        </attribute>
        <attribute>
            <description>

                &lt;p class="changed_added_2_0"&gt;If present, this attribute
                refers
                to the value of one of the exposed attached objects within the
                composite component inside of which this tag is nested.&lt;/p&gt;

            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Create and register a child UIOutput component
            associated with the closest parent UIComponent
            custom action, which renders nested body content.
        </description>
        <tag-name>verbatim</tag-name>
        <component>
            <component-type>javax.faces.Output</component-type>
            <renderer-type>javax.faces.Text</renderer-type>
        </component>
        <attribute>
            <description>
                Flag indicating that generated markup must
                be escaped in a manner that is appropriate
                for the markup language to be rendered.
                Expressions must evaluate to a boolean.
                Default value is false.
            </description>
            <name>escape</name>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether or not this component should be rendered
                (during Render Response Phase), or processed on any subsequent
                form submit. The default value for this property is true.
            </description>
            <name>rendered</name>
            <required>false</required>
            <type>java.lang.Boolean</type>
        </attribute>
    </tag>
    <tag>
        <description>
            Container for all JavaServer Faces core and custom
            component actions used on a page.
        </description>
        <tag-name>view</tag-name>
        <component>
            <component-type>javax.faces.ViewRoot</component-type>
            <renderer-type/>
        </component>
        <attribute>
            <description>
                Locale to use for localizing this page. Expressions
                must evaluate to a java.util.Locale or to a String
                that is converted to a Locale.
            </description>
            <name>locale</name>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Identifier for the RenderKit to use for
                rendering this page.
            </description>
            <name>renderKitId</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Specifies the content-type of the response.
            </description>
            <name>contentType</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>

        <attribute>
            <description>
                Specifies the character encoding that should be used for the
                response.
            </description>
            <name>encoding</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>

                MethodBinding pointing to a method that takes a
                javax.faces.event.PhaseEvent and returns void. This method
                will be called before every phase except for restore view.
            </description>
            <name>beforePhase</name>
            <required>false</required>
            <method-signature>void beforePhase(javax.faces.event.PhaseEvent)
            </method-signature>
        </attribute>
        <attribute>
            <description>

                MethodBinding pointing to a method that takes a
                javax.faces.event.PhaseEvent and returns void. This method
                will be called after every phase except for restore view.
            </description>
            <name>afterPhase</name>
            <required>false</required>
            <method-signature>void afterPhase(javax.faces.event.PhaseEvent)
            </method-signature>
        </attribute>
    </tag>
</facelet-taglib>
