<?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>oneerror</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>
