<?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>
        This tag library contains JavaServer Faces component tags for all
        UIComponent + HTML RenderKit Renderer combinations defined in the
        JavaServer Faces Specification.
    </description>
    <namespace>http://java.sun.com/jsf/html</namespace>
    <tag>
        <description>
            <![CDATA[<div class="changed_added_2_0">Render an HTML "input" element of type "button".
            The value of the component is rendered as the button text and the outcome of the
            component is used to determine the target URL which is activated by onclick.  If
            "image" attribute is specified, render it as the value of the "src" attribute after
            passing it to the <code>getResourceURL()</code> method of the <code>ViewHandler</code>
            for this application, and passing the result through the <code>encodeResourceURL()</code>
            method of the <code>ExternalContext</code>. Any child <code>UIParameter</code> components
            are appended to the String to be used as the target URL as query parameters before rendering.
            The entire target URL string must be passed through a call to the <code>encodeResourceURL()</code>
            method of the <code>ExternalContext</code>.  The name of the <code>UIParameter</code> goes on the
            left hand side, and the value of the <code>UIParameter</code> on the right hand side.  The name
            and the value must be URLEncoded.  Each <code>UIParameter</code> instance is separeted by an
            ampersand, as dictated in the URL spec.  The final encoded result will be written out to the
            onclick attribute of the button as "window.location.href = '<encoded HREF value>'".
            If the developer has specified a custom onlclick the window.location.href name/value
            pair will be appended at the end of the developer specified script.
            If the "fragment" attribute is specified, the value will be included at the end
            of the resulting URL preceded by a hash mark.  If the "styleClass" attribute is specified,
            render its value as the value of the "class" attribute.  If the "id" attribute is specified,
            follow the same steps as mentioned in the "<a href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
            Notes on Encoding</a>" regarding the "id" attribute for UIInput components.  If the
            "disabled" attribute is specified, do not render the "onclick" element and assign the
            "disabled" attribute a value of true.</div>]]>
        </description>
        <tag-name>
            button
        </tag-name>
        <component>
            <component-type>javax.faces.HtmlOutcomeTargetButton</component-type>
            <renderer-type>javax.faces.Button</renderer-type>
        </component>
        <attribute>
            <description>
                <![CDATA[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>
                <![CDATA[Whether to include page parameters in the target URI.]]>
            </description>
            <name>
                includeViewParams
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.Boolean
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The logical outcome used to resolve a navigation case.]]>
            </description>
            <name>
                outcome
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[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>
                boolean
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The current value of this component.]]>
            </description>
            <name>
                value
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.Object
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Access key that, when pressed, transfers focus
                to this element.]]>
            </description>
            <name>
                accesskey
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Alternate textual description of the
                element rendered by this component.]]>
            </description>
            <name>
                alt
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Direction indication for text that does not inherit directionality.
                Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).]]>
            </description>
            <name>
                dir
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The identifier of the page fragment which should
                be brought into focus when the target page is
                rendered. The value of this attribute is appended
                to the end of target URL following a hash (#) mark.
                This notation is part of the standard URL syntax.]]>
            </description>
            <name>
                fragment
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[<p>
                Absolute or relative URL of the
                image to be displayed for this
                button.  If specified, this
                "input" element will be of type
                "image".  Otherwise, it will be
                of the type specified by the
                "type" property with a label
                specified by the "value"
                property.  <span
                class="changed_added_2_0">Note
                that if the value of this
                attribute starts with "/", the
                rendered value for this
                attribute will be prefixed with
                the context-root for this
                application.</span>
                </p>]]>
            </description>
            <name>
                image
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Code describing the language used in the generated markup
                for this component.]]>
            </description>
            <name>
                lang
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when this element loses focus.]]>
            </description>
            <name>
                onblur
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                clicked over this element.]]>
            </description>
            <name>
                onclick
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                double clicked over this element.]]>
            </description>
            <name>
                ondblclick
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when this element receives focus.]]>
            </description>
            <name>
                onfocus
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
                pressed down over this element.]]>
            </description>
            <name>
                onkeydown
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
                pressed and released over this element.]]>
            </description>
            <name>
                onkeypress
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
                released over this element.]]>
            </description>
            <name>
                onkeyup
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                pressed down over this element.]]>
            </description>
            <name>
                onmousedown
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                moved within this element.]]>
            </description>
            <name>
                onmousemove
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                moved away from this element.]]>
            </description>
            <name>
                onmouseout
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                moved onto this element.]]>
            </description>
            <name>
                onmouseover
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                released over this element.]]>
            </description>
            <name>
                onmouseup
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[CSS style(s) to be applied when this component is rendered.]]>
            </description>
            <name>
                style
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Space-separated list of CSS style class(es) to be applied when
                this element is rendered.  This value must be passed through
                as the "class" attribute on generated markup.]]>
            </description>
            <name>
                styleClass
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Position of this element in the tabbing order
                for the current document.  This value must be
                an integer between 0 and 32767.]]>
            </description>
            <name>
                tabindex
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Advisory title information about markup elements generated
                for this component.]]>
            </description>
            <name>
                title
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </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>
    </tag>
    <tag>
        <description>
            <![CDATA[<div class="changed_added_2_0">Render an HTML "a" anchor element.  The value of the
            component is rendered as the anchor text and the outcome of the component is used
            to determine the target URL rendered in the "href" attribute.  Any
            child <code>UIParameter</code> components are appended to the String to be
            output as the value of the "href" attribute as query parameters
            before rendering.  The entire "href" string must be passed through
            a call to the <code>encodeResourceURL()</code> method of the
            <code>ExternalContext</code>.  The name of the <code>UIParameter</code> goes on
            the left hand side, and the value of the <code>UIParameter</code> on the right
            hand side.  The name and the value must be URLEncoded.  Each
            <code>UIParameter</code> instance is separated by an ampersand, as dictated in
            the URL spec.  If the "fragment" attribute is specified, the value will be
            included at the end of the resulting URL preceded by a hash mark.
            If the "styleClass" attribute is specified, render
            its value as the value of the "class" attribute.  If the "id" attribute
            is specified, follow the same steps as mentioned in the
            "<a href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding">General
            Notes on Encoding</a>" regarding the "id" attribute for UIInput components.
            If the "disabled" attribute is specified, do not render the HTML "a"
            anchor element or the "href" element.  Instead, render a "span" element.
            If the "styleClass" attribute is specified, render its value as the value
            of the "class" attribute on the "span".  Render any pass-through attributes
            on the "span".</div>]]>
        </description>
        <tag-name>
            link
        </tag-name>
        <component>
            <component-type>javax.faces.HtmlOutcomeTargetLink</component-type>
            <renderer-type>javax.faces.Link</renderer-type>
        </component>
        <attribute>
            <description>
                <![CDATA[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>
                <![CDATA[Whether to include page parameters in the target URI.]]>
            </description>
            <name>
                includeViewParams
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.Boolean
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The logical outcome used to resolve a navigation case.]]>
            </description>
            <name>
                outcome
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[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>
                boolean
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The current value of this component.]]>
            </description>
            <name>
                value
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.Object
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Access key that, when pressed, transfers focus
                to this element.]]>
            </description>
            <name>
                accesskey
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The character encoding of the resource designated
                by this hyperlink.]]>
            </description>
            <name>
                charset
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The position and shape of the hot spot on the screen
                (for use in client-side image maps).]]>
            </description>
            <name>
                coords
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Direction indication for text that does not inherit directionality.
                Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).]]>
            </description>
            <name>
                dir
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Flag indicating that this element must never
                receive focus or be included in a subsequent
                submit.]]>
            </description>
            <name>
                disabled
            </name>
            <required>
                false
            </required>
            <type>
                boolean
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The identifier of the page fragment which should
                be brought into focus when the target page is
                rendered. The value of this attribute is appended
                to the end of target URL following a hash (#) mark.
                This notation is part of the standard URL syntax.]]>
            </description>
            <name>
                fragment
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The language code of the resource designated
                by this hyperlink.]]>
            </description>
            <name>
                hreflang
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Code describing the language used in the generated markup
                for this component.]]>
            </description>
            <name>
                lang
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when this element loses focus.]]>
            </description>
            <name>
                onblur
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                clicked over this element.]]>
            </description>
            <name>
                onclick
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                double clicked over this element.]]>
            </description>
            <name>
                ondblclick
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when this element receives focus.]]>
            </description>
            <name>
                onfocus
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
                pressed down over this element.]]>
            </description>
            <name>
                onkeydown
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
                pressed and released over this element.]]>
            </description>
            <name>
                onkeypress
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
                released over this element.]]>
            </description>
            <name>
                onkeyup
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                pressed down over this element.]]>
            </description>
            <name>
                onmousedown
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                moved within this element.]]>
            </description>
            <name>
                onmousemove
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                moved away from this element.]]>
            </description>
            <name>
                onmouseout
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                moved onto this element.]]>
            </description>
            <name>
                onmouseover
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
                released over this element.]]>
            </description>
            <name>
                onmouseup
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The relationship from the current document
                to the anchor specified by this hyperlink.
                The value of this attribute is a space-separated
                list of link types.]]>
            </description>
            <name>
                rel
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[A reverse link from the anchor specified
                by this hyperlink to the current document.
                The value of this attribute is a space-separated
                list of link types.]]>
            </description>
            <name>
                rev
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The shape of the hot spot on the screen
                (for use in client-side image maps).  Valid
                values are:  default (entire region); rect
                (rectangular region); circle (circular region);
                and poly (polygonal region).]]>
            </description>
            <name>
                shape
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[CSS style(s) to be applied when this component is rendered.]]>
            </description>
            <name>
                style
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Space-separated list of CSS style class(es) to be applied when
                this element is rendered.  This value must be passed through
                as the "class" attribute on generated markup.]]>
            </description>
            <name>
                styleClass
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Position of this element in the tabbing order
                for the current document.  This value must be
                an integer between 0 and 32767.]]>
            </description>
            <name>
                tabindex
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Name of a frame where the resource
                retrieved via this hyperlink is to
                be displayed.]]>
            </description>
            <name>
                target
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Advisory title information about markup elements generated
                for this component.]]>
            </description>
            <name>
                title
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The content type of the resource designated
                by this hyperlink.]]>
            </description>
            <name>
                type
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </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>
    </tag>
    <tag>
        <description>
            <![CDATA[

          <p>Render the markup for a <code>&lt;head&gt;</code> element.</p>

          <p>Decode Behavior</p>

          <ul>

          <p>No action is required during decode for this renderer.</p>

          </ul>

          <p>Encode Behavior</p>

          <ul>

          <p>Render the starting <code>&lt;head&gt;</code> element tag.  Any attributes declared on the element must be passed through
          unmodified to the rendered output.
          Just before rendering the
          closing <code>&lt;/head&gt;</code> element tag, render any resources that have been targeted
          for this "head" element:
          <ul>
          <li>Obtain a <code>UIViewRoot</code> instance.</li>
          <li>Obtain a <code>List</code> of component resources targeted for
          this "head" element with a call to <code>UIViewRoot.getComponentResources()</code>
          with the <code>String "head"</code> as the argument.</li>
          <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances
          and call <code>encodeAll</code> on each <code>UIComponent</code> instance.

          <p>Any attributes declared on the element must be passed through
          unmodified to the rendered output.</p>

          </ul>
          Render the ending <code>&lt;/head&gt;</code> element tag.</p>

           ]]>
        </description>
        <tag-name>
            head
        </tag-name>
        <component>
            <component-type>javax.faces.Output</component-type>
            <renderer-type>javax.faces.Head</renderer-type>
        </component>
        <attribute>
            <description>
                <![CDATA[Direction indication for text that does not inherit directionality.
              Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).]]>
            </description>
            <name>
                dir
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Code describing the language used in the generated markup
              for this component.]]>
            </description>
            <name>
                lang
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </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>
    </tag>
    <tag>
        <description>
            <![CDATA[

          <p>Render the markup for a <code>&lt;body&gt;</code> element.</p>

          <p>Decode Behavior</p>

          <ul>

          <p>No action is required during decode for this renderer.</p>

          </ul>

          <p>Encode Behavior</p>

          <ul>

          <p>Render the starting <code>&lt;body&gt;</code> element tag. Just before rendering the
          closing <code>&lt;/body&gt;</code> element tag, render any resources that have been targeted
          for this "body" element:
          <ul>
          <li>Obtain a <code>UIViewRoot</code> instance.</li>

          <li>Obtain a <code>List</code> of component resources targeted for
          this "body" element with a call to
          <code>UIViewRoot.getComponentResources()</code> with the
          <code>String "body"</code> as the argument.  Render the ending
          <code>&lt;/body&gt;</code> element tag.</li>

          <li>Iterate over the returned <code>List</code> of <code>UIComponent</code> instances
          and call <code>encodeAll</code> on each <code>UIComponent</code> instance.
          </ul>

          <p>Any attributes declared on the element must be passed through
          unmodified to the rendered output.</p>

          ]]>
        </description>
        <tag-name>
            body
        </tag-name>
        <component>
            <component-type>javax.faces.Output</component-type>
            <renderer-type>javax.faces.Body</renderer-type>
        </component>
        <attribute>
            <description>
                <![CDATA[Direction indication for text that does not inherit directionality.
              Valid values are "LTR" (left-to-right) and "RTL" (right-to-left).]]>
            </description>
            <name>
                dir
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Code describing the language used in the generated markup
              for this component.]]>
            </description>
            <name>
                lang
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
              clicked over this element.]]>
            </description>
            <name>
                onclick
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
              double clicked over this element.]]>
            </description>
            <name>
                ondblclick
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
              pressed down over this element.]]>
            </description>
            <name>
                onkeydown
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
              pressed and released over this element.]]>
            </description>
            <name>
                onkeypress
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a key is
              released over this element.]]>
            </description>
            <name>
                onkeyup
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when the user agent finishes loading
              a window or all frames within a frameset.]]>
            </description>
            <name>
                onload
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
              pressed down over this element.]]>
            </description>
            <name>
                onmousedown
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
              moved within this element.]]>
            </description>
            <name>
                onmousemove
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
              moved away from this element.]]>
            </description>
            <name>
                onmouseout
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
              moved onto this element.]]>
            </description>
            <name>
                onmouseover
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when a pointer button is
              released over this element.]]>
            </description>
            <name>
                onmouseup
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Javascript code executed when the user agent removes
              a document from a window or frame.]]>
            </description>
            <name>
                onunload
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[CSS style(s) to be applied when this component is rendered.]]>
            </description>
            <name>
                style
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Space-separated list of CSS style class(es) to be applied when
              this element is rendered.  This value must be passed through
              as the "class" attribute on generated markup.]]>
            </description>
            <name>
                styleClass
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[Advisory title information about markup elements generated
              for this component.]]>
            </description>
            <name>
                title
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span
            class="changed_modified_2_0"&gt;Renders an HTML "input"
            element.&lt;/p&gt;
            &lt;p&gt;Decode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Obtain the &lt;code&gt;Map&lt;/code&gt; from the
            "requestParameterMap"
            property of the &lt;code&gt;ExternalContext&lt;/code&gt;. If the
            value in the
            &lt;code&gt;Map&lt;/code&gt; for the value of the "clientId"
            property of the
            component is &lt;code&gt;null&lt;/code&gt;, create a String by
            concatenating
            the value of the "clientId" property of the component with the
            String ".x" (without the quotes). Create another String in the
            same manner, but concatenate ".y" (without the quotes). If
            &lt;code&gt;null&lt;/code&gt; is the value in the &lt;code&gt;Map&lt;/code&gt;
            for both
            Strings, return from &lt;code&gt;decode()&lt;/code&gt;. If the value
            in the
            &lt;code&gt;Map&lt;/code&gt; for the value of the "clientId"
            property of the
            component is not &lt;code&gt;null&lt;/code&gt;, get the value of the
            "type"
            attribute, and convert it to lower case. If the result is equal
            to the String "reset" (without the quotes), return from
            &lt;code&gt;decode()&lt;/code&gt;. Otherwise, create a
            &lt;code&gt;javax.faces.event.ActionEvent&lt;/code&gt; around the
            component,
            and pass it to the &lt;code&gt;queueEvent()&lt;/code&gt; method of
            the
            component, which must be an instance of
            &lt;code&gt;UICommand&lt;/code&gt;.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Render the clientId of the component as the value of the
            "name"
            attribute. Render the current value of the component as the value
            of the "value" attribute. If "image" attribute is specified render
            it as the value of the "src" attribute after passing it to the
            &lt;code&gt;getResourceURL()&lt;/code&gt; method of the
            &lt;code&gt;ViewHandler&lt;/code&gt; for this application, and
            passing the
            result through the &lt;code&gt;encodeResourceURL()&lt;/code&gt;
            method of the
            &lt;code&gt;ExternalContext&lt;/code&gt;. &lt;span
            class="changed_added_2_0"&gt;Note that calling
            &lt;code&gt;getResourceURL()&lt;/code&gt; will prefix the
            context-root of the
            current application if the value of the "src" attribute starts
            with "/".&lt;/span&gt; When handling the "image" attribute, the
            value must not
            be escaped. For example, &lt;code&gt;&amp;&lt;/code&gt; must not be
            turned into
            &lt;code&gt;&amp;amp;amp;&lt;/code&gt;. If the "styleClass"
            attribute is
            specified, render its value as the value of the "class" attribute.
            If the user has specified an "onclick" attribute, append that
            JavaScript to any existing JavaScript before rendering.&lt;/p&gt;
            &lt;p class="changed_added_2_0"&gt;If the component being rendered
            by
            this renderer has any &lt;code&gt;UIParameter&lt;/code&gt; children,
            each one
            of them must be rendered using the renderer for component-family:
            "javax.faces.Input" and renderer-type: "javax.faces.Hidden". For
            discussion, this is called the hiddenRenderer. A component with
            component-type "javax.faces.Input" must be created for local use
            in rendering each &lt;code&gt;UIParameter&lt;/code&gt; child. The
            "id"
            property of the temporary component must be set to the "name" of
            the &lt;code&gt;UIParameter&lt;/code&gt;. The "value" property of
            the
            temporary component must be set to the "value" of the
            &lt;code&gt;UIParameter&lt;/code&gt;. For each &lt;code&gt;UIParameter&lt;/code&gt;
            child, the hiddenRenderer must have its
            &lt;code&gt;encodeBegin()&lt;/code&gt;, &lt;code&gt;encodeChildren()&lt;/code&gt;,
            and
            &lt;code&gt;encodeEnd()&lt;/code&gt; methods called, in order,
            passing the
            temporary component as the second argument.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>commandButton</tag-name>
        <component>
            <component-type>javax.faces.HtmlCommandButton</component-type>
            <renderer-type>javax.faces.Button</renderer-type>
        </component>
        <attribute>
            <description>
                MethodExpression representing the application action to invoke
                when this component is activated by the user. The expression
                must evaluate to a public method that takes no parameters, and
                returns an Object (the toString() of which is called to derive
                the logical outcome) which is passed to the NavigationHandler
                for this application.
            </description>
            <name>action</name>
            <required>false</required>
            <method-signature>java.lang.Object action()</method-signature>
        </attribute>
        <attribute>
            <description>
                &lt;p&gt;
                MethodExpression representing an action listener method that
                will be notified when this component is activated by the user.
                The expression must evaluate to a public method that takes an
                ActionEvent 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 where the event came from,
                but this can be useful in cases where a notification is needed
                that "some action happened".&lt;/span&gt;
                &lt;/p&gt;
            </description>
            <name>actionListener</name>
            <required>false</required>
            <method-signature>void actionListener(javax.faces.event.ActionEvent)
            </method-signature>
        </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, if this component is activated by the
                user,
                notifications should be delivered to interested listeners and
                actions
                immediately (that is, during Apply Request Values phase) rather
                than
                waiting until Invoke Application phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</type>
        </attribute>
        <attribute>
            <description>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Alternate textual description of the
                element rendered by this component.
            </description>
            <name>alt</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                &lt;p&gt;
                Absolute or relative URL of the
                image to be displayed for this
                button. If specified, this
                "input" element will be of type
                "image". Otherwise, it will be
                of the type specified by the
                "type" property with a label
                specified by the "value"
                property. &lt;span
                class="changed_added_2_0"&gt;Note
                that if the value of this
                attribute starts with "/", the
                rendered value for this
                attribute will be prefixed with
                the context-root for this
                application.&lt;/span&gt;
                &lt;/p&gt;
            </description>
            <name>image</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Type of button to create. Valid values are "submit", "button",
                and "reset". If not specified, or not a valid value, the default
                value is "submit".
            </description>
            <name>type</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span
            class="changed_modified_2_0"&gt;Render&lt;/span&gt; an HTML "a"
            anchor
            element that acts like a form submit button when
            clicked.&lt;/p&gt;
            &lt;p&gt;General Behaviour&lt;/p&gt;
            &lt;p&gt;Both the encode and decode behavior require the ability to
            get
            the id/name for a hidden field, &lt;span
            class="changed_added_2_0"&gt;which may be rendered in markup or
            which
            may be programmatically added via client DOM manipulation&lt;/span&gt;,
            whose value is set by the JavaScript form submit. This name must
            be constructed as follows:&lt;/p&gt;
            &lt;ul&gt;
            &lt;li&gt;&lt;p&gt;Get the clientId for the form of which this
            component is a
            child.&lt;/p&gt;&lt;/li&gt;
            &lt;li&gt;&lt;p&gt;Append
            &lt;code&gt;NamingContainer.SEPARATOR_CHAR&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
            &lt;li&gt;&lt;p&gt;Append a constant string that is the same for all
            command
            link components in the tree.&lt;/p&gt;&lt;/li&gt;
            &lt;/ul&gt;
            &lt;p&gt;In the following text, this String is called
            hiddenFieldName.&lt;/p&gt;
            &lt;p&gt;Decode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Obtain the "clientId" property of the component. Obtain the
            &lt;code&gt;Map&lt;/code&gt; from the "requestParameterMap" property
            of the
            &lt;code&gt;ExternalContext&lt;/code&gt;. Derive hiddenFieldName as
            above.
            Get the entry in the &lt;code&gt;Map&lt;/code&gt; under the key that
            is the
            hiddenFieldName. If the there is no entry, or the entry is the
            empty String, or the entry is not equal to the value of the
            "clientId" property, return immediately. If there is an entry,
            and its value is equal to the value of the "clientId" property,
            create a new &lt;code&gt;javax.faces.event.ActionEvent&lt;/code&gt;
            instance
            around the component and call &lt;code&gt;queueActionEvent()&lt;/code&gt;
            on
            the component, passing the event.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;If the value of the &lt;code&gt;disabled&lt;/code&gt;
            attribute is
            &lt;code&gt;true&lt;/code&gt;, render a span element. Render all the
            passthru
            attributes and the &lt;code&gt;target&lt;/code&gt; attribute as
            pass-through
            attributes on the span, even though the &lt;code&gt;target&lt;/code&gt;
            attribute will have no effect on a span. Render the current value
            of the component as the content of the span. Return.&lt;/p&gt;
            &lt;p&gt;If the &lt;code&gt;disabled&lt;/code&gt; attribute is not
            present, or its
            value is &lt;code&gt;false&lt;/code&gt;, render an HTML &lt;code&gt;a&lt;/code&gt;
            element. Render "#" as the value of the "href" attribute. Render
            the current value of the component as the link text if it is
            specified. Render JavaScript that is functionally equivalent to
            the following as the value of the "onclick" attribute:&lt;/p&gt;
            &lt;p&gt;&lt;code&gt;document.forms['CLIENT_ID']['hiddenFieldName'].value='CLIENT_ID';
            document.forms['CLIENT_ID']['PARAM1_NAME'].value='PARAM1_VALUE';
            document.forms['CLIENT_ID']['PARAM2_NAME'].value='PARAM2_VALUE';
            return false;&lt;/code&gt;&lt;/p&gt;
            &lt;p&gt;document.forms['CLIENT_ID'].submit()" where hiddenFieldName
            is
            as described above, CLIENT_ID is the clientId of the UICommand
            component, PARAM*_NAME and PARAM*_VALUE are the names and values,
            respectively, of any nested UIParameter children. The name and
            the value must be URLEncoded. If an "onclick" attribute was
            specified by the user, render this JavaScript in a function,
            and render the user's JavaScript in a function. Render both
            functions
            in a choice function as follows:&lt;/p&gt;
            &lt;p&gt;&lt;code&gt;var a=function(){#USER_FUNCTION#};
            var b=function(){#JSF_FUNCTION#};
            return (a()==false) ? false : b();&lt;/code&gt;&lt;/p&gt;
            &lt;p&gt;where #USER_FUNCTION# is the user's JavaScript and
            #JSF_FUNCTION# is the JavaScript rendered by JSF. The choice
            function should operate such that if the user's JavaScript returns
            true, then the rendered JavaScript will also execute.&lt;/p&gt;
            &lt;p&gt;If the "styleClass" attribute is specified, render its
            value as
            the value of the "class" attribute. Render any non-UIParameter
            output children as normal inside of the "a" element. These will
            appear as the link text. Allow the form renderer to output a
            single "input" element (for the entire page, regardless of how
            many command link components are in the page) of "type" "hidden"
            whose "name" is the value of hiddenFieldName, and which must not
            have a "value" attribute. Multiple occurrences of command link
            components in the tree should not cause multiple hiddenFieldName
            hidden fields. Allow the form renderer to output an "input"
            element of "type" "hidden" for each of the nested UIParameter
            children, taking the name property (but not the value) from each
            one in turn. If the "disabled" attribute is specified, do not
            render the HTML "a" anchor element or its "href" attribute.
            Instead, render a "span" element. If the "styleClass" attribute
            is specified, render its value as the value of the "class"
            attribute on the "span". Render any pass-through attributes on
            the "span". The content of the span element comes from the value
            of the component or its children as specified above.&lt;/p&gt;
            &lt;p&gt;If the user specified a &lt;code&gt;target&lt;/code&gt;
            attribute, its
            value must be set using javascript since the &lt;code&gt;onclick&lt;/code&gt;
            handler will prevent the target attribute from being generated.
            This must be accomplished using JavaScript that is equivalent to
            the following.&lt;/p&gt;
            &lt;p&gt;&lt;code&gt;document.forms['CLIENT_ID'].target='TARGET';&lt;/code&gt;&lt;/p&gt;
            &lt;p&gt;Where TARGET is the value of the target attribute on the
            JSP
            tag.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>commandLink</tag-name>
        <component>
            <component-type>javax.faces.HtmlCommandLink</component-type>
            <renderer-type>javax.faces.Link</renderer-type>
        </component>
        <attribute>
            <description>
                MethodExpression representing the application action to invoke
                when this component is activated by the user. The expression
                must evaluate to a public method that takes no parameters, and
                returns an Object (the toString() of which is called to derive
                the logical outcome) which is passed to the NavigationHandler
                for this application.
            </description>
            <name>action</name>
            <required>false</required>
            <method-signature>java.lang.Object action()</method-signature>
        </attribute>
        <attribute>
            <description>
                &lt;p&gt;
                MethodExpression representing an action listener method that
                will be notified when this component is activated by the user.
                The expression must evaluate to a public method that takes an
                ActionEvent 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 where the event came from,
                but this can be useful in cases where a notification is needed
                that "some action happened".&lt;/span&gt;
                &lt;/p&gt;
            </description>
            <name>actionListener</name>
            <required>false</required>
            <method-signature>void actionListener(javax.faces.event.ActionEvent)
            </method-signature>
        </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, if this component is activated by the
                user,
                notifications should be delivered to interested listeners and
                actions
                immediately (that is, during Apply Request Values phase) rather
                than
                waiting until Invoke Application phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</type>
        </attribute>
        <attribute>
            <description>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The character encoding of the resource designated
                by this hyperlink.
            </description>
            <name>charset</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The position and shape of the hot spot on the screen
                (for use in client-side image maps).
            </description>
            <name>coords</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never
                receive focus or be included in a subsequent
                submit.
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                The language code of the resource designated
                by this hyperlink.
            </description>
            <name>hreflang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The relationship from the current document
                to the anchor specified by this hyperlink.
                The value of this attribute is a space-separated
                list of link types.
            </description>
            <name>rel</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A reverse link from the anchor specified
                by this hyperlink to the current document.
                The value of this attribute is a space-separated
                list of link types.
            </description>
            <name>rev</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The shape of the hot spot on the screen
                (for use in client-side image maps). Valid
                values are: default (entire region); rect
                (rectangular region); circle (circular region);
                and poly (polygonal region).
            </description>
            <name>shape</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Name of a frame where the resource
                retrieved via this hyperlink is to
                be displayed.
            </description>
            <name>target</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The content type of the resource designated
                by this hyperlink.
            </description>
            <name>type</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Renders an HTML "table" element compliant with the HTML 401
            specification. Render the "caption" facet, if present, inside a
            "caption" element immediately below the "table" element. If the
            "captionClass" attribute is specified, render its value as the
            value of the "class" attribute on the "caption" element. If the
            "captionStyle" attribute is specified, render its value as the
            value of the "style" attribute on the "caption" element.&lt;/p&gt;
            &lt;p&gt;Please consult the javadoc for &lt;code&gt;UIData&lt;/code&gt;
            to
            supplement this specification. If the "styleClass" attribute is
            specified, render its value as the value of the "class" attribute
            on the "table" element. Any pass-through attributes are also
            rendered on the "table" element. &lt;/p&gt;
            &lt;p&gt;Column Groups&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;If the &lt;code&gt;UIData&lt;/code&gt; component has a
            "colgroups" facet,
            render its contents. Consistent with the rules of facets in
            general, this facet must have only one child. In general, this
            will be a &lt;code&gt;panel group&lt;/code&gt; component that will
            contain
            &lt;code&gt;colgroup&lt;/code&gt; and &lt;code&gt;col&lt;/code&gt;
            elements per the HTML
            Table specification. Use of column grouping can improve
            accessibility. This facet must be rendered before the table
            header and footer.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Rendering the header&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;If the &lt;code&gt;UIData&lt;/code&gt; component has a
            "header" facet, or
            any of the child &lt;code&gt;UIColumn&lt;/code&gt; components has a
            "header"
            facet, render a "thead" element. If the &lt;code&gt;UIData&lt;/code&gt;
            component has a "header" facet, encode its contents inside of "tr"
            and "th" elements, respectively. Output the value of the
            "headerClass" attribute of the &lt;code&gt;UIData&lt;/code&gt;
            component, if
            present, as the value of the "class" attribute on the "th".
            Output the number of child &lt;code&gt;UIColumn&lt;/code&gt;
            components of the
            &lt;code&gt;UIData&lt;/code&gt; component as the value of the
            "colspan"
            attribute on the "th". Output "colgroup" as the value of the
            "scope" attribute on the "th" element. &lt;/p&gt;
            &lt;p&gt;If any of the child &lt;code&gt;UIColumn&lt;/code&gt;
            components has a
            "header" facet render a "tr" element. For each
            &lt;code&gt;UIColumn&lt;/code&gt; that actually has a "header"
            facet, render
            it inside of a "th" element. Columns that don't have a "header"
            facet cause an empty "th" element to be rendered. Output the
            value of the "headerClass" attribute of the &lt;code&gt;UIColumn&lt;/code&gt;
            component, if present, as the value of the "class" attribute on
            the "th". If the "headerClass" attribute of the &lt;code&gt;UIColumn&lt;/code&gt;
            component is not present, output the value of the "headerClass"
            attribute of the &lt;code&gt;UIData&lt;/code&gt; component, if
            present, as
            the value of the "class" attribute on the "th". Output "col" as
            the value of the "scope" attribute on the "th" element.
            &lt;/p&gt;
            &lt;p&gt;Close out the "thead" element.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Rendering the footer&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Follow the same process as for the header, except replace
            "header" with "footer", "th" with "td", "thead" with "tfoot", and
            "headerClass" with "footerClass". Do not render any "scope"
            attribute for the footer.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Rendering the table body&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Look at the value of the "bodyrows" attribute. If present,
            this must be a comma separated list of integers. Each entry in
            this list is the row index of the row before which a "tbody"
            element should be rendered.&lt;/p&gt;
            &lt;p&gt;If there was no "bodyrows" attribute, or it was empty,
            render a
            "tbody" element. Keep track of the result of the "rows" property
            on the &lt;code&gt;UIData&lt;/code&gt; component. Keep track of the
            number of
            rows we have rendered so far. Iterate through the rows. Set the
            "rowIndex" property of the &lt;code&gt;UIData&lt;/code&gt; component
            to be
            correct as we iterate through the rows. Stop rendering children
            and close out the "tbody" element if the "rowAvailable" property
            of the &lt;code&gt;UIData&lt;/code&gt; returned false. If the
            current row
            index is contained in the "bodyrows" attribute, check if a "tbody"
            start element was rendered that needs to be closed, and if so,
            close the "tbody" element. Then render a "tbody" element start.
            Otherwise, do not render a "tbody" element.&lt;/p&gt;
            &lt;p&gt;Output a "tr" element. Output the value of the "rowClasses"
            per the attribute description below. For each
            &lt;code&gt;UIColumn&lt;/code&gt; child, if the column component has
            a
            "rowHeader" attribute with a value of "true", output a "th"
            element with a "scope" attribute with the value of "row".
            Otherwise, if the column component has no "rowHeader" attribute,
            or its value is false, output a "td" element. In either case
            attach the value of the "columnClasses" attribute of the
            &lt;code&gt;UIData&lt;/code&gt; component per the attribute
            description below.
            Recursively encode each child of each &lt;code&gt;UIColumn&lt;/code&gt;
            child.
            Close out the "td" or "th" element. When done with the row, close
            out the "tr" element. When done with all the rows, close out the
            "tbody" element.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;When done rendering all the rows, set the "rowIndex"
            property of
            the &lt;code&gt;UIData&lt;/code&gt; to -1, and close out the "table"
            element.&lt;/p&gt;
        </description>
        <tag-name>dataTable</tag-name>
        <component>
            <component-type>javax.faces.HtmlDataTable</component-type>
            <renderer-type>javax.faces.Table</renderer-type>
        </component>
        <attribute>
            <description>
                Zero-relative row number of the first row to be displayed. If
                this
                property is set to zero, rendering will begin with the first row
                of
                the underlying data.
            </description>
            <name>first</name>
            <required>false</required>
            <type>int</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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                The number of rows to display, starting with the one identified
                by the
                "first" property. If this value is set to zero, all available
                rows in
                the underlying data model will be displayed.
            </description>
            <name>rows</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Name of a request-scope attribute under which the model data for
                the
                row selected by the current value of the "rowIndex" property
                (i.e.
                also the current value of the "rowData" property) will be
                exposed.
            </description>
            <name>var</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Name or code of the background color for this table.
            </description>
            <name>bgcolor</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Comma separated list of row indices for which a new
                "tbody" element should be started (and any
                previously opened one should be ended).
            </description>
            <name>bodyrows</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Width (in pixels) of the border to be drawn
                around this table.
            </description>
            <name>border</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) that will be
                applied to any caption generated for this table.
            </description>
            <name>captionClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this caption is rendered.
            </description>
            <name>captionStyle</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Definition of how much space the user agent should
                leave between the border of each cell and its contents.
            </description>
            <name>cellpadding</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Definition of how much space the user agent should
                leave between the left side of the table and the
                leftmost column, the top of the table and the top of
                the top side of the topmost row, and so on for the
                right and bottom of the table. It also specifies
                the amount of space to leave between cells.
            </description>
            <name>cellspacing</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Comma-delimited list of CSS style classes that will be applied
                to the columns of this table. A space separated list of
                classes may also be specified for any individual column. If
                the number of elements in this list is less than the number of
                actual column children of the UIData, no "class"
                attribute is output for each column greater than the number of
                elements in the list. If the number of elements in the list
                is greater than the number of actual column children of the
                UIData, the elements at the posisiton in the list
                after the last column are ignored.
            </description>
            <name>columnClasses</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) that will be
                applied to any footer generated for this table.
            </description>
            <name>footerClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code specifying which sides of the frame surrounding
                this table will be visible. Valid values are:
                none (no sides, default value); above (top side only);
                below (bottom side only); hsides (top and bottom sides
                only); vsides (right and left sides only); lhs (left
                hand side only); rhs (right hand side only); box
                (all four sides); and border (all four sides).
            </description>
            <name>frame</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) that will be
                applied to any header generated for this table.
            </description>
            <name>headerClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Comma-delimited list of CSS style classes that will be applied
                to the rows of this table. A space separated list of classes
                may also be specified for any individual row. Thes styles are
                applied, in turn, to each row in the table. For example, if
                the list has two elements, the first style class in the list
                is applied to the first row, the second to the second row, the
                first to the third row, the second to the fourth row, etc. In
                other words, we keep iterating through the list until we reach
                the end, and then we start at the beginning again.
            </description>
            <name>rowClasses</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code specifying which rules will appear between cells
                within this table. Valid values are: none (no rules,
                default value); groups (between row groups); rows
                (between rows only); cols (between columns only); and
                all (between all rows and columns).
            </description>
            <name>rules</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Summary of this table's purpose and structure, for
                user agents rendering to non-visual media such as
                speech and Braille.
            </description>
            <name>summary</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Width of the entire table, for visual user agents.
            </description>
            <name>width</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;span class="changed_modified_2_0"&gt;
            Renders&lt;/span&gt; an HTML "form" element.
            &lt;p&gt;Decode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Obtain the &lt;code&gt;Map&lt;/code&gt; from the
            "requestParameterMap"
            property of the &lt;code&gt;ExternalContext&lt;/code&gt;. If the map
            contains
            an entry for the "clientId" of this &lt;code&gt;UIForm&lt;/code&gt;
            component,
            call &lt;code&gt;setSubmitted(true)&lt;/code&gt; on the form,
            otherwise call
            &lt;code&gt;setSubmitted(false)&lt;/code&gt; on the form.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;The value of the "method" attribute must be "post". The
            value
            of the "action" attribute must be the result of passing the view
            identifier of the current view to the &lt;code&gt;getActionURL()&lt;/code&gt;
            method of the &lt;code&gt;ViewHandler&lt;/code&gt; for this
            application, then
            passing that String to the &lt;code&gt;encodeActionURL()&lt;/code&gt;
            method
            on the &lt;code&gt;ExternalContext&lt;/code&gt;. The value of the
            acceptcharset
            attribute must be rendered as the value of "accept-charset".
            If the "styleClass" attribute is specified, render its value as the
            value of the "class" attribute. Render a "name"
            attribute with a value the same as the "id" attribute as described
            in "&lt;a
            href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding"&gt;General
            Notes on
            Encoding&lt;/a&gt;" regarding the "id" attribute for UIInput
            components. &lt;p class="changed_added_2_0"&gt;Obtain the &lt;code&gt;UIViewRoot
            view identifier&lt;/code&gt; and
            use it to obtain an &lt;code&gt;action URL&lt;/code&gt; by calling
            &lt;code&gt;ViewHandler.getActionURL&lt;/code&gt;.
            Use the &lt;code&gt;action URL&lt;/code&gt; to obtain an &lt;code&gt;encoded
            action URL&lt;/code&gt; by calling
            &lt;code&gt;ExternalContext.encodeActionURL&lt;/code&gt;. Obtain an
            &lt;code&gt;encoded partial action URL&lt;/code&gt; by calling
            &lt;code&gt;ExternalContext.encodePartialActionURL&lt;/code&gt;
            using &lt;code&gt;action URL&lt;/code&gt; as the argument.
            Compare the result from &lt;code&gt;ExternalContext.encodePartialActionURL&lt;/code&gt;
            with the
            value from &lt;code&gt;ExternalContext.encodeActionURL()&lt;/code&gt;.
            If they are different,
            render a hidden field with the name &lt;code&gt;javax.faces.encodedURL&lt;/code&gt;
            and the value
            of this hidden field as the value from &lt;code&gt;ExternalContext.encodePartialActionURL&lt;/code&gt;.&lt;/p&gt;
            Call &lt;code&gt;ViewHandler.writeState()&lt;/code&gt;
            before the the close of the "form" element. Render all the
            necessary hidden fields for all commandLink instances in the page
            just before the close of the "form" element.
            &lt;div class="changed_modified_2_0"&gt;
            Just before rendering the closing &lt;code&gt;&amp;lt;/form&amp;gt;&lt;/code&gt;
            element tag, render
            any resources that have been targeted for this form:
            &lt;ul&gt;
            &lt;li&gt;Obtain a &lt;code&gt;UIViewRoot&lt;/code&gt; instance.&lt;/li&gt;
            &lt;li&gt;Obtain a &lt;code&gt;List&lt;/code&gt; of component
            resources targeted for
            this form with a call to &lt;code&gt;UIViewRoot.getComponentResources()&lt;/code&gt;
            with the &lt;code&gt;String "form"&lt;/code&gt; as the argument.&lt;/li&gt;
            &lt;li&gt;Iterate over the returned &lt;code&gt;List&lt;/code&gt; of
            &lt;code&gt;UIComponent&lt;/code&gt; instances
            and call &lt;code&gt;encodeAll&lt;/code&gt; on each &lt;code&gt;UIComponent&lt;/code&gt;
            instance.
            &lt;/ul&gt;
            &lt;/div&gt;
            &lt;/p&gt;
            &lt;/ul&gt;
            &lt;/div&gt;
        </description>
        <tag-name>form</tag-name>
        <component>
            <component-type>javax.faces.HtmlForm</component-type>
            <renderer-type>javax.faces.Form</renderer-type>
        </component>
        <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 whether or not this form should prepend its id
                to its descendent's id during the clientId generation process.
                If this flag is not set, the default value is true.
            </description>
            <name>prependId</name>
            <required>false</required>
            <type>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>boolean</type>
        </attribute>
        <attribute>
            <description>
                List of content types that a server processing this form
                will handle correctly
            </description>
            <name>accept</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                List of character encodings for input data
                that are accepted by the server processing
                this form.
            </description>
            <name>acceptcharset</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Content type used to submit the form to the server. If not
                specified, the default value is
                "application/x-www-form-urlencoded".
            </description>
            <name>enctype</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this form is reset.
            </description>
            <name>onreset</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this form is submitted.
            </description>
            <name>onsubmit</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Name of a frame where the response
                retrieved after this form submit is to
                be displayed.
            </description>
            <name>target</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span
            class="changed_modified_2_0"&gt;Renders&lt;/span&gt; an HTML "img"
            element. Render the clientId as the value of the "id"
            attribute.&lt;/p&gt;
            &lt;div class="changed_modified_2_0"&gt;
            &lt;p&gt;Handling the Value&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;If the "name" attribute is present, execute algorithm &lt;a
            href="javax.faces.Outputjavax.faces.resource.Script.html#ResourceCommonGetResource"&gt;Common
            Algorithm for Obtaining A Resource to Render&lt;/a&gt; to obtain a
            &lt;code&gt;Resource&lt;/code&gt; instance. Call
            &lt;code&gt;Resource.getRequestPath()&lt;/code&gt; and output the
            result as the
            value of the "src" attribute on the rendered markup.&lt;/p&gt;
            &lt;p&gt;Otherwise, if the "url" attribute is present, treat its
            value as
            if it was the value of the "value" attribute. Otherwise, if the
            "value" attribute is present, render the value of the component as
            the value of the "src" attribute, after passing it to the
            &lt;code&gt;getResourceURL()&lt;/code&gt; method of the &lt;code&gt;ViewHandler&lt;/code&gt;
            for this application, and passing the result through the
            &lt;code&gt;encodeResourceURL()&lt;/code&gt; method of the
            &lt;code&gt;ExternalContext&lt;/code&gt;.&lt;/p&gt;
            &lt;p&gt;When handling the "src" attribute,
            the value must not be escaped. For example, &lt;code&gt;&amp;&lt;/code&gt;
            must not
            be turned into &lt;code&gt;&amp;amp;amp;&lt;/code&gt;. If the
            "styleClass"
            attribute is specified, render its value as the value of the "class"
            attribute.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;/div&gt;
        </description>
        <tag-name>graphicImage</tag-name>
        <component>
            <component-type>javax.faces.HtmlGraphicImage</component-type>
            <renderer-type>javax.faces.Image</renderer-type>
        </component>
        <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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                Context-relative URL to retrieve the resource associated with
                this component. This is an alias for the "value" property.
            </description>
            <name>url</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Alternate textual description of the
                element rendered by this component.
            </description>
            <name>alt</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Override for the height of this image.
            </description>
            <name>height</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this image is to be used as a server side
                image map. Such an image must be enclosed within a hyperlink
                ("a"). A value of false causes no attribute to be rendered,
                while a value of true causes the attribute to be rendered as
                ismap="ismap".
            </description>
            <name>ismap</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;div class="changed_added_2_0"&gt;&lt;p&gt;The &lt;em&gt;libraryName&lt;/em&gt;
                for this resource.&lt;/p&gt;&lt;/div&gt;
            </description>
            <name>library</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                URI to a long description of the image
                represented by this element.
            </description>
            <name>longdesc</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;div class="changed_added_2_0"&gt;&lt;p&gt;The &lt;em&gt;resourceName&lt;/em&gt;
                for this resource.&lt;/p&gt;&lt;/div&gt;
            </description>
            <name>name</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The name of a client side image map (an HTML "map"
                element) for which this element provides the image.
            </description>
            <name>usemap</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Override for the width of this image.
            </description>
            <name>width</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Renders an HTML "input" element of type
            "hidden".&lt;/p&gt;
            &lt;p&gt;Decode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;See the decode description for the &lt;a
            href="javax.faces.Inputjavax.faces.Text.html#encode"&gt;Input
            Text&lt;/a&gt; renderer.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Render the clientId of the component as the value of the
            "name" attribute. Render the current value of the component as
            the value of the "value" attribute.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>inputHidden</tag-name>
        <component>
            <component-type>javax.faces.HtmlInputHidden</component-type>
            <renderer-type>javax.faces.Hidden</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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 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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Renders an HTML "input" element of "type" "password".&lt;/p&gt;
            &lt;p&gt;Decode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;See the decode description for the &lt;a
            href="javax.faces.Inputjavax.faces.Text.html#encode"&gt;Input
            Text&lt;/a&gt; renderer.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;
            Render the clientId of the component as the value of the "name"
            attribute. Render the current value of the component as the value
            of the "value" attribute, if and only if the "redisplay" component
            attribute is the string "true". If the "styleClass" attribute is
            specified, render its value as the value of the "class"
            attribute.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>inputSecret</tag-name>
        <component>
            <component-type>javax.faces.HtmlInputSecret</component-type>
            <renderer-type>javax.faces.Secret</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Alternate textual description of the
                element rendered by this component.
            </description>
            <name>alt</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                If the value of this attribute is "off", render "off" as the
                value
                of the attribute. This indicates that the browser should
                disable its autocomplete feature for this component. This is
                useful for components that perform autocompletion and do not
                want the browser interfering. If this attribute is not set or
                the value
                is "on", render nothing.
            </description>
            <name>autocomplete</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </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>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that any existing value
                in this field should be rendered when the
                form is created. Because this is a potential
                security risk, password values are not
                displayed by default.
            </description>
            <name>redisplay</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                The number of characters used to determine
                the width of this field.
            </description>
            <name>size</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Renders an HTML "input"
            element of "type" "text".&lt;/p&gt;
            &lt;p&gt;&lt;a name="decode"&gt;Decode Behavior&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Obtain the &lt;code&gt;Map&lt;/code&gt; from the
            "requestParameterMap"
            property of the &lt;code&gt;ExternalContext&lt;/code&gt;. If the
            &lt;code&gt;Map&lt;/code&gt; contains an entry for the "clientId" of
            the
            component, pass the value of the entry to the
            &lt;code&gt;setSubmittedValue()&lt;/code&gt; method of the
            component, which
            must be an instance of &lt;code&gt;EditableValueHolder&lt;/code&gt;.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt; Render the clientId of the component as
            the value of the "name" attribute. Render the current value of
            the component as the value of the "value" attribute. If the
            "styleClass" attribute is specified, render its value as the value
            of the "class" attribute.
            &lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>inputText</tag-name>
        <component>
            <component-type>javax.faces.HtmlInputText</component-type>
            <renderer-type>javax.faces.Text</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Alternate textual description of the
                element rendered by this component.
            </description>
            <name>alt</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                If the value of this attribute is "off", render "off" as the
                value
                of the attribute. This indicates that the browser should
                disable its autocomplete feature for this component. This is
                useful for components that perform autocompletion and do not
                want the browser interfering. If this attribute is not set or
                the value
                is "on", render nothing.
            </description>
            <name>autocomplete</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </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>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                The number of characters used to determine
                the width of this field.
            </description>
            <name>size</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Renders an HTML "textarea" element.&lt;/p&gt;
            &lt;p&gt;Decode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;See the encode description for the &lt;a
            href="javax.faces.Inputjavax.faces.Text.html#encode"&gt;Input
            Text&lt;/a&gt; renderer.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt; Render the
            clientId as the value of the "name" attribute. Render the current
            valu eof the component inside the "textarea"
            element.&lt;/p&gt; &lt;/ul&gt;
        </description>
        <tag-name>inputTextarea</tag-name>
        <component>
            <component-type>javax.faces.HtmlInputTextarea</component-type>
            <renderer-type>javax.faces.Textarea</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The number of columns to be displayed.
            </description>
            <name>cols</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                The number of rows to be displayed.
            </description>
            <name>rows</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Render a single message for a specific component.&lt;/p&gt;
            &lt;p&gt;Set-up for Rendering&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Obtain the "summary" and "detail" properties from
            &lt;code&gt;UIMessage&lt;/code&gt; component. If not present, keep
            the
            empty string as the value, respectively. Obtain the first
            &lt;code&gt;FacesMessage&lt;/code&gt; to render from the component,
            using
            the "for" property of the &lt;code&gt;UIMessage&lt;/code&gt;. This
            will be
            the only message we render. Obtain the severity style for this
            message. If the severity of the message is
            &lt;code&gt;FacesMessage.SEVERITY_INFO&lt;/code&gt;, the severity
            style
            comes from the value of the "infoStyle" attribute. If the
            severity of the message is
            &lt;code&gt;FacesMessage.SEVERITY_WARN&lt;/code&gt;, the severity
            style
            comes from the value of the "warnStyle" attribute, and so on for
            each of the severities, &lt;code&gt;INFO, WARN, ERROR&lt;/code&gt;
            and
            &lt;code&gt;FATAL&lt;/code&gt;. The same rules apply for obtaining
            the
            severity style class, but instead of "infoStyle, warnStyle", etc
            use "infoClass, warnClass", etc. Obtain the "style",
            "styleClass" and "layout" attributes from the
            &lt;code&gt;UIMessage&lt;/code&gt; component. If we have a "style"
            attribute and a severity style attribute, use the severity style
            attribute as the value of the "style" attribute. If we have no
            "style" attribute, but do have a severity style, use the
            severity style as the value of the "style" attribute. The same
            precedence rules apply for the style class. Obtain the value of
            the &lt;code&gt;dir&lt;/code&gt; and &lt;code&gt;lang&lt;/code&gt;
            attributes.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Rendering&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;For the message renderer, we only render one row, for the
            first
            message. For the messages renderer, we render as many rows as we
            have messages. If any of the "dir", "lang", "style" or
            "styleClass" attributes has a non-null value (as determined
            above), render a "span" element, outputting the value of the
            "style" attribute as the the value of the "style" attribute, and
            outputting the value of the "styleClass" attribute as the value of
            the "class" attribute on the "span" element. Output the "dir" and
            "lang" attributes as well, if they are present. If the
            &lt;code&gt;UIMessage&lt;/code&gt; has a "tooltip" attribute with
            the value of
            "true", and the &lt;code&gt;UIMessage&lt;/code&gt; has "showSummary"
            and
            "showDetail" properties with the value "true", if we haven't
            already written out the "span", output the "summary" as the value
            of the "title" attribute on the "span". If we haven't already
            written out a "title" attribute, and "showSummary" is true, output
            the summary. If "showDetail" is true, output the detail. Close
            out the span if necessary.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>message</tag-name>
        <component>
            <component-type>javax.faces.HtmlMessage</component-type>
            <renderer-type>javax.faces.Message</renderer-type>
        </component>
        <attribute>
            <description>
                Client identifier of the component for which to display
                messages.
            </description>
            <name>for</name>
            <required>true</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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether the detail portion of displayed messages
                should be included. Default value is "true".
            </description>
            <name>showDetail</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether the summary portion of displayed
                messages
                should be included. Default value is "false".
            </description>
            <name>showSummary</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to any message
                with a severity class of "ERROR".
            </description>
            <name>errorClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to apply to any message
                with a severity class of "ERROR".
            </description>
            <name>errorStyle</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to any message
                with a severity class of "FATAL".
            </description>
            <name>fatalClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to apply to any message
                with a severity class of "FATAL".
            </description>
            <name>fatalStyle</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to any message
                with a severity class of "INFO".
            </description>
            <name>infoClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to apply to any message
                with a severity class of "INFO".
            </description>
            <name>infoStyle</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether the detail portion of the
                message should be displayed as a tooltip.
            </description>
            <name>tooltip</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to any message
                with a severity class of "WARN".
            </description>
            <name>warnClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to apply to any message
                with a severity class of "WARN".
            </description>
            <name>warnStyle</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span class="changed_modified_2_0"&gt;The&lt;/span&gt;
            same as for the
            Message renderer, but output all the messages. &lt;span
            class="changed_added_2_0"&gt;If an "id" attribute has been
            specified,
            it must be rendered on the outermost markup corresponding to this
            component.&lt;/span&gt; If the value of the "layout" attribute is
            "table", render nested "table", "tr", and "td" elements, in that
            order. If the value of the "layout" attribute is "list", or the
            "layout" attribute is not specified, render nested "ul", "li"
            elements, in that order. Output the value of the "style" attribute
            as the value of the "style" attribute, output the value of the
            "styleClass" attribute as the value of the "class" attribute, and
            output the dir and lang attributes. Output these values on the
            "table" element or the "ul" element. Output the values of the
            "errorStyle", "fatalStyle", "infoStyle", "warnStyle" attributes as
            the value of the "style" attribute on either the "tr" element or
            the "li" element. Output the values of the "errorClass",
            "fatalClass", "infoClass", "warnClass" attributes as the value of
            the "class" attribute on either the "tr" element or the "li"
            element. The component is a &lt;code&gt;UIMessages&lt;/code&gt;, and
            there is
            no "for" attribute. Therefore, use either &lt;code&gt;null&lt;/code&gt;
            to
            obtain the messages from the &lt;code&gt;FacesContext&lt;/code&gt;
            or the empty
            string if the components "globalOnly" property is
            &lt;code&gt;true&lt;/code&gt;. If the layout was "table" close out
            the table
            elements, otherwise, close out the list elements.&lt;/p&gt;
        </description>
        <tag-name>messages</tag-name>
        <component>
            <component-type>javax.faces.HtmlMessages</component-type>
            <renderer-type>javax.faces.Messages</renderer-type>
        </component>
        <attribute>
            <description>
                Client identifier of the component for which to display
                messages. This
                attribute is mutually exclusive with globalOnly and take
                precedence
                if used.
            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that only global messages (that is, messages not
                associated with any client identifier) are to be displayed.
                Default value is "false".
            </description>
            <name>globalOnly</name>
            <required>false</required>
            <type>boolean</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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether the detail portion of displayed messages
                should be included. Default value is "false".
            </description>
            <name>showDetail</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether the summary portion of displayed
                messages
                should be included. Default value is "true".
            </description>
            <name>showSummary</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to any message
                with a severity class of "ERROR".
            </description>
            <name>errorClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to apply to any message
                with a severity class of "ERROR".
            </description>
            <name>errorStyle</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to any message
                with a severity class of "FATAL".
            </description>
            <name>fatalClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to apply to any message
                with a severity class of "FATAL".
            </description>
            <name>fatalStyle</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to any message
                with a severity class of "INFO".
            </description>
            <name>infoClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to apply to any message
                with a severity class of "INFO".
            </description>
            <name>infoStyle</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The type of layout markup to use when rendering
                error messages. Valid values are "table" (an HTML
                table) and "list" (an HTML list). If not specified,
                the default value is "list".
            </description>
            <name>layout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating whether the detail portion of the
                message should be displayed as a tooltip.
            </description>
            <name>tooltip</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to any message
                with a severity class of "WARN".
            </description>
            <name>warnClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to apply to any message
                with a severity class of "WARN".
            </description>
            <name>warnStyle</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Render parameterized text. Obtain the
            &lt;code&gt;style&lt;/code&gt;, &lt;code&gt;styleClass&lt;/code&gt;,
            &lt;code&gt;dir&lt;/code&gt;, and
            &lt;code&gt;lang&lt;/code&gt; attributees from this component. If
            any are
            present, render a "span" element. Output the
            &lt;code&gt;styleClass&lt;/code&gt; attribute (if present) as the
            value of the
            &lt;code&gt;class&lt;/code&gt; attribute. Output the &lt;code&gt;style&lt;/code&gt;
            attribute as the value of the &lt;code&gt;style&lt;/code&gt;
            attribute.
            Output the &lt;code&gt;dir&lt;/code&gt; and &lt;code&gt;lang&lt;/code&gt;
            attributes as
            pass through attributes. Accrue a list of the values of all child
            &lt;code&gt;UIParameter&lt;/code&gt; components of this component.
            If there
            are one or more accumulated parameter values, convert the list of
            parameter values to an &lt;code&gt;Object&lt;/code&gt; array, call
            &lt;code&gt;MessageFormat.format()&lt;/code&gt;, passing the
            &lt;code&gt;value&lt;/code&gt; of this component as the first
            argument, and
            the array of parameter values as the second argument, and render
            the result. Otherwise, render the &lt;code&gt;value&lt;/code&gt; of
            this
            component unmodified.&lt;/p&gt;
        </description>
        <tag-name>outputFormat</tag-name>
        <component>
            <component-type>javax.faces.HtmlOutputFormat</component-type>
            <renderer-type>javax.faces.Format</renderer-type>
        </component>
        <attribute>
            <description>
                Converter instance registered with this component.
            </description>
            <name>converter</name>
            <required>false</required>
            <type>javax.faces.convert.Converter</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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that characters that are sensitive
                in HTML and XML markup must be escaped. This flag
                is set to "true" by default.
            </description>
            <name>escape</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            Renders an HTML "label" element. Render the current value
            of the component as label text if it is specified. If a "for"
            attribute is
            specified, find the component specified by the value of the "for"
            attribute, and render its client id as the value of the "for"
            attribute.
            If "styleClass" attribute is specified, render its value as the
            value
            of the "class" attribute.
        </description>
        <tag-name>outputLabel</tag-name>
        <component>
            <component-type>javax.faces.HtmlOutputLabel</component-type>
            <renderer-type>javax.faces.Label</renderer-type>
        </component>
        <attribute>
            <description>
                Converter instance registered with this component.
            </description>
            <name>converter</name>
            <required>false</required>
            <type>javax.faces.convert.Converter</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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that characters that are sensitive
                in HTML and XML markup must be escaped. If omitted, this
                flag is assumed to be "true".
            </description>
            <name>escape</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Client identifier of the component for which this element
                is a label.
            </description>
            <name>for</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            Render an HTML "a" anchor element. The value of the
            component is rendered as the value of the "href" attribute. Any
            child UIParameter components are appended to the String to be
            output as the value of the "href" attribute as query parameters
            before rendering. The entire "href" string must be passed through
            a call to the &lt;code&gt;encodeResourceURL()&lt;/code&gt; method of
            the
            &lt;code&gt;ExternalContext&lt;/code&gt;. The name of the
            UIParameter goes on
            the left hand side, and the value of the UIParameter on the right
            hand side. The name and the value must be URLEncoded. Each
            UIParameter instance is separeted by an ampersand, as dictated in
            the URL spec. If the "styleClass" attribute is specified, render
            its value as the value of the "class" attribute. If the "id"
            attribute
            is specified, follow the same steps as mentioned in the
            "&lt;a
            href="../../../renderkitdocs/HTML_BASIC/renderkit-summary.html#general_encoding"&gt;General
            Notes on Encoding&lt;/a&gt;" regarding the "id" attribute for
            UIInput components.
            If the "disabled" attribute is specified, do not render the HTML "a"
            anchor element or the "href" element. Instead, render a "span"
            element.
            If the "styleClass" attribute is specified, render its value as the
            value
            of the "class" attribute on the "span". Render any pass-through
            attributes
            on the "span".
        </description>
        <tag-name>outputLink</tag-name>
        <component>
            <component-type>javax.faces.HtmlOutputLink</component-type>
            <renderer-type>javax.faces.Link</renderer-type>
        </component>
        <attribute>
            <description>
                Converter instance registered with this component.
            </description>
            <name>converter</name>
            <required>false</required>
            <type>javax.faces.convert.Converter</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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The character encoding of the resource designated
                by this hyperlink.
            </description>
            <name>charset</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The position and shape of the hot spot on the screen
                (for use in client-side image maps).
            </description>
            <name>coords</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never
                receive focus or be included in a subsequent
                submit.
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                The language code of the resource designated
                by this hyperlink.
            </description>
            <name>hreflang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The relationship from the current document
                to the anchor specified by this hyperlink.
                The value of this attribute is a space-separated
                list of link types.
            </description>
            <name>rel</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                A reverse link from the anchor specified
                by this hyperlink to the current document.
                The value of this attribute is a space-separated
                list of link types.
            </description>
            <name>rev</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The shape of the hot spot on the screen
                (for use in client-side image maps). Valid
                values are: default (entire region); rect
                (rectangular region); circle (circular region);
                and poly (polygonal region).
            </description>
            <name>shape</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Name of a frame where the resource
                retrieved via this hyperlink is to
                be displayed.
            </description>
            <name>target</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The content type of the resource designated
                by this hyperlink.
            </description>
            <name>type</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            If the "styleClass", "style", "dir" or "lang"
            attributes are present, render a "span" element. If the
            "styleClass" attribute is present, render its value as the value
            of the "class" attribute. If the "style" attribute is present,
            pass it thru. If the "escape" attribute is not present, or it is
            present and its value is "true" all angle brackets should be
            converted to the ampersand xx semicolon syntax when rendering the
            value of the "value" attribute as the value of the component. If
            the "escape" attribute is present and is "false" the value of the
            component should be rendered as text without escaping.
        </description>
        <tag-name>outputText</tag-name>
        <component>
            <component-type>javax.faces.HtmlOutputText</component-type>
            <renderer-type>javax.faces.Text</renderer-type>
        </component>
        <attribute>
            <description>
                Converter instance registered with this component.
            </description>
            <name>converter</name>
            <required>false</required>
            <type>javax.faces.convert.Converter</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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Object</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that characters that are sensitive
                in HTML and XML markup must be escaped. This flag
                is set to "true" by default.
            </description>
            <name>escape</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            <![CDATA[<div class="changed_added_2_0">
            
            <p>Render the markup for a <code>&lt;script&gt;</code> element that
            renders the script <code>Resource</code> specified by the optional
            <code>name</code> attribute and <code>library</code> attributes.</p>
            
            <p>The implementation of this renderer must have a <a target="_"
            href="../../javadocs/javax/faces/event/ListenerFor.html"><code>@ListenerFor</code></a>
            annotation attached to it, at the class level, declaring <a target="_"
            href="../../javadocs/javax/faces/event/PostAddToViewEvent.html"><code>PostAddToViewEvent.class</code></a>
            as the value of the <code>systemEventClass</code> attribute.  The presence of
            this annotation on a renderer implies the renderer implements <a
            target="_"
            href="../../javadocs/javax/faces/event/ComponentSystemEventListener.html"><code>ComponentSystemEventListener</code></a>,
            which this renderer must do.  The implementation of
            <code>processEvent()</code> must extract the <code>UIComponent</code>
            from the argument event and look for the presence of the key
            "<code>target</code>" in the component's attribute <code>Map</code>.  If
            and only if such a key is present, the implementation of
            <code>processEvent()</code> must pass the component to <a target="_"
            href="../../javadocs/javax/faces/component/UIViewRoot.html#addComponentResource(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent)"><code>UIViewRoot.addComponentResource()</code></a>.</p>
            
            <p>Decode Behavior</p>
            
            <ul>
            
            <p>No action is required during decode for this renderer.</p>
            
            </ul>
            
            <p>Encode Behavior</p>
            
            <ul>
            
            <p><a name="ResourceCommonGetResource">Common Algorithm for Obtaining A Resource to Render</a></p>
            
            <ul>
            
            <p>This algorithm is used by all resource renderers to obtain
            a <code>Resource</code> instance which is then rendered in a
            specific way depending on what kind of renderer is doing the
            encoding.</p>
            
            <ul>
            
            <li><p>Look in the component attribute <code>Map</code> for a
            value under the key <em>name</em>.</p></li>
            
            <li><p>Look in the component attribute <code>Map</code> for a
            value under the key <em>library</em>.  This attribute is
            optional, therefore, <em>library</em> may be
            <code>null</code>.</p></li>
            
            <li><p>Create the resource by calling
            <code>Application.getResourceHandler.createResource(<em>name</em>,
            <em>library</em>);</code>.</p></li>
            
            </p></li>
            
            </ul>
            
            </ul>
            
            <p><a name="ResourceCommonEncode">Common Encode Behavior</a></p>
            
            <ul>
            
            <p>This algorithm is used by all resource renderers to render the
            resource.</p>
            
            <p><code>encodeBegin()</code> must take no action.</p>
            
            <p>Because this renderer returns <code>true</code> from
            <code>getRendersChildren()</code>, the <code>encodeChildren()
            method must take the following action.</code></p>
            
            <ul>
            
            <li><p>If there is no <em>name</em> attribute, and the
            argument <code>component</code> has no children, and
            <code>ProjectStage</code> is not
            <code>ProjectStage.Production</code>, add a
            <code>FacesMessage</code> for this component's clientId to the
            <code>FacesContext</code> stating that if no name attribute is
            present, and no body content is present either, then the user
            should take action to correct this problem.  In this case,
            <code>encodeChildren()</code> must take no further
            action.</p></li>
            
            <li><p>If there is no <em>name</em> attribute and the argument
            <code>component</code> <b>does</b> have children, the renderer
            must ensure that those children are encoded as usual.</p></li>
            
            <li><p>If there <b>is</b> a <em>name</em> attribute and the
            argument <code>component</code> <b>does</b> have children, the
            renderer must log a descriptive localized message stating that
            the child content will be ignored.  The resource referenced by
            the <em>name</em> attribute will be rendered in
            <code>encodeEnd()</code>.</p></li>
            
            <li><p>If there <b>is</b> a <em>name attribute</em> and the
            argument <code>component</code> <b>does not</b> have children,
            <code>encodeChildren()</code> must take no action.</p></li>
            
            </ul>
            
            <p><code>encodeEnd()</code> must take specific action based on
            the specific kind of resource being rendered.</p>
            
            </ul>
            
            <p>Use the algorithm <em>Common Encode Behavior</em> for
            <code>encodeBegin()</code>, <code>encodeChildren()</code> and
            <code>getRendersChildren()</code>.</p>
            
            <p>For <code>encodeEnd()</code>, use the algorithm <em>Common
            Algorithm for Obtaining A Resource to Render</em> above to
            obtain a reference to the <code>Resource</code> to be
            encoded.</p>
            
            <p>If this is NOT the first time this <code>Resource</code> has
            been referenced on this request take no action and return.</p>
            
            <p>Render a script element.  Use the result from calling
            <code>resource.getRequestPath()</code> as the value of the "src"
            attribue and the result from calling
            <code>resource.getContentType()</code> as the value of the "type"
            attribute.</p>
            
            </p>
            
            
            
            </ul>
            
            
            
            </div>]]>
        </description>
        <tag-name>
            outputScript
        </tag-name>
        <component>
            <component-type>javax.faces.Output</component-type>
            <renderer-type>javax.faces.resource.Script</renderer-type>
        </component>
        <attribute>
            <description>
                <![CDATA[Converter instance registered with this component.]]>
            </description>
            <name>
                converter
            </name>
            <required>
                false
            </required>
            <type>
                javax.faces.convert.Converter
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[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>
                <![CDATA[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>
                boolean
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The current value of this component.]]>
            </description>
            <name>
                value
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.Object
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[<div class="changed_added_2_0"><p>The <em>libraryName</em> for this resource.</p></div>]]>
            </description>
            <name>
                library
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[<div class="changed_added_2_0"><p>The <em>resourceName</em> for this resource.</p></div>]]>
            </description>
            <name>
                name
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[<div class="changed_added_2_0"><p>The <em>target</em> area for which this resource will be rendered.  For example, <em>target="head"</em> would cause the resource to be rendered within the <em>head</em> element.</p></div>]]>
            </description>
            <name>
                target
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </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>
    </tag>
    <tag>
        <description>
            <![CDATA[<div class="changed_added_2_0">
            
            <p>Render the markup for a <code>&lt;link&gt;</code> element that
            renders the style <code>Resource</code> specified by the optional
            <code>name</code> and <code>library</code> attributes.</p>
            
            <p>Decode Behavior</p>
            
            <ul>
            
            <p>No action is required during decode for this renderer.</p>
            
            </ul>
            
            <p>Encode Behavior</p>
            
            <ul>
            
            <p>Use the algorithm <em>Common Encode Behavior</em> for
            <code>encodeBegin()</code>, <code>encodeChildren()</code> and
            <code>getRendersChildren()</code>.</p>
            
            <p>For <code>encodeEnd()</code>, use the algorithm <a
            href="javax.faces.Outputjavax.faces.resource.Script.html#ResourceCommonGetResource">Common
            Algorithm for Obtaining A Resource to Render</a> to obtain a
            reference to the <code>Resource</code> to be encoded.</p>
            
            <p>Output a <code>&lt;link&gt;</code> element.  Use the result from
            calling <code>resource.getRequestPath()</code> as the value of the
            "href" attribute, the result from calling
            <code>resource.getContentType()</code> as the value of the "type"
            attribute, the literal string "stylesheet" as the value of the "rel"
            attribute, and the literal string "screen" as the value of the "media"
            attribute.</p>
            
            <p>The implementation of this renderer must have a <a target="_"
            href="../../javadocs/javax/faces/event/ListenerFor.html"><code>@ListenerFor</code></a>
            annotation attached to it, at the class level, declaring <a target="_"
            href="../../javadocs/javax/faces/event/PostAddToViewEvent.html"><code>PostAddToViewEvent.class</code></a>
            as the value of the <code>systemEventClass</code> attribute.  The presence of
            this annotation on a renderer implies the renderer implements <a target="_"
            href="../../javadocs/javax/faces/event/ComponentSystemEventListener.html"><code>ComponentSystemEventListener</code></a>,
            which this renderer must do.  The implementation of
            <code>processEvent()</code> must extract the <code>UIComponent</code>
            from the argument event pass it to <a target="_"
            href="../../javadocs/javax/faces/component/UIViewRoot.html#addComponentResource(javax.faces.context.FacesContext,%20javax.faces.component.UIComponent,%20java.lang.String)"><code>UIViewRoot.addComponentResource()</code></a>, specifying
            the literal string "<code>head</code>" as the last argument.</p>
            
            <p>The stylsheet renderer must ensure that any stylesheets are included in the &lt;head&gt; of the document.
            </p>
            
            </div>]]>
        </description>
        <tag-name>
            outputStylesheet
        </tag-name>
        <component>
            <component-type>javax.faces.Output</component-type>
            <renderer-type>javax.faces.resource.Stylesheet</renderer-type>
        </component>
        <attribute>
            <description>
                <![CDATA[Converter instance registered with this component.]]>
            </description>
            <name>
                converter
            </name>
            <required>
                false
            </required>
            <type>
                javax.faces.convert.Converter
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[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>
                <![CDATA[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>
                boolean
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[The current value of this component.]]>
            </description>
            <name>
                value
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.Object
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[<div class="changed_added_2_0"><p>The <em>libraryName</em> for this resource.</p></div>]]>
            </description>
            <name>
                library
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </type>
        </attribute>
        <attribute>
            <description>
                <![CDATA[<div class="changed_added_2_0"><p>The <em>resourceName</em> for this resource.</p></div>]]>
            </description>
            <name>
                name
            </name>
            <required>
                false
            </required>
            <type>
                java.lang.String
            </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>
    </tag>
    <tag>
        <description>
            Renders an HTML "table" element, conforming to the
            rules in the HTML 401 specification. Render the "caption" facet,
            if present, inside a "caption" element immediately below the "table"
            element.
            If the "captionClass" attribute is specified, render its value as
            the value
            of the "class" attribute on the "caption" element. If the
            "captionStyle" attribute
            is specified, render its value as the value of the "style" attribute
            on the "caption" element. If the "styleClass" attribute is
            specified, render
            its value as the value of the "class" attribute. Render the
            pass-through
            attributes in the table below. Render the "header" facet, if
            present, inside of
            "thead", "tr", and "th" elements, nested in that order. If the
            "headerClass" attribute is specifed, render its value as the value
            of the "class" attribute on the "th" element. Render "colgroup"
            as the value of the "scope" attribute. Render the value of the
            "columns" attribute as the value of the "colspan" attribute on the
            "th" element. Render the "footer" facet if present, using similar
            logic to the rendering of the "header", but replacing "thead" with
            "tfoot", "th" with "td", and "headerClass" with "footerClass".
            Render the children of the &lt;code&gt;UIPanel&lt;/code&gt;
            component inside
            of a "tbody" element. Render the children based on the value of
            the "columns" attribute, creating a new row each time a "columns"
            worth of children have been rendered. For the start of each row,
            render a "tr" element. Output the value of the "rowClasses" per
            the attribute description below. For each child, output a "td"
            element, attaching the value of the "columnClasses" attribute per
            the attribute description below. Recursively encode each child.
            Close out the "td" element. When done with the row, close out the
            "tr" element. If a child has "rendered==false" it is not rendered,
            and the column counter must not be incremented.
        </description>
        <tag-name>panelGrid</tag-name>
        <component>
            <component-type>javax.faces.HtmlPanelGrid</component-type>
            <renderer-type>javax.faces.Grid</renderer-type>
        </component>
        <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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                Name or code of the background color for this table.
            </description>
            <name>bgcolor</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Comma separated list of row indices for which a new
                "tbody" element should be started (and any
                previously opened one should be ended).
            </description>
            <name>bodyrows</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Width (in pixels) of the border to be drawn
                around this table.
            </description>
            <name>border</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) that will be
                applied to any caption generated for this table.
            </description>
            <name>captionClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this caption is rendered.
            </description>
            <name>captionStyle</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Definition of how much space the user agent should
                leave between the border of each cell and its contents.
            </description>
            <name>cellpadding</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Definition of how much space the user agent should
                leave between the left side of the table and the
                leftmost column, the top of the table and the top of
                the top side of the topmost row, and so on for the
                right and bottom of the table. It also specifies
                the amount of space to leave between cells.
            </description>
            <name>cellspacing</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Comma-delimited list of CSS style classes that will be applied
                to the columns of this table. A space separated list of
                classes may also be specified for any individual column. If
                the number of elements in this list is less than the number of
                actual column children of the UIData, no "class"
                attribute is output for each column greater than the number of
                elements in the list. If the number of elements in the list
                is greater than the number of actual column children of the
                UIData, the elements at the posisiton in the list
                after the last column are ignored.
            </description>
            <name>columnClasses</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                The number of columns to render before
                starting a new row.
            </description>
            <name>columns</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) that will be
                applied to any footer generated for this table.
            </description>
            <name>footerClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code specifying which sides of the frame surrounding
                this table will be visible. Valid values are:
                none (no sides, default value); above (top side only);
                below (bottom side only); hsides (top and bottom sides
                only); vsides (right and left sides only); lhs (left
                hand side only); rhs (right hand side only); box
                (all four sides); and border (all four sides).
            </description>
            <name>frame</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) that will be
                applied to any header generated for this table.
            </description>
            <name>headerClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Comma-delimited list of CSS style classes that will be applied
                to the rows of this table. A space separated list of classes
                may also be specified for any individual row. Thes styles are
                applied, in turn, to each row in the table. For example, if
                the list has two elements, the first style class in the list
                is applied to the first row, the second to the second row, the
                first to the third row, the second to the fourth row, etc. In
                other words, we keep iterating through the list until we reach
                the end, and then we start at the beginning again.
            </description>
            <name>rowClasses</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code specifying which rules will appear between cells
                within this table. Valid values are: none (no rules,
                default value); groups (between row groups); rows
                (between rows only); cols (between columns only); and
                all (between all rows and columns).
            </description>
            <name>rules</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Summary of this table's purpose and structure, for
                user agents rendering to non-visual media such as
                speech and Braille.
            </description>
            <name>summary</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Width of the entire table, for visual user agents.
            </description>
            <name>width</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            Intended for use in situations when only one
            UIComponent child can be nested, such as in the case of facets.
            If the "style" or "styleClass" attributes are present, and the
            "layout"
            attribute is present with a value of "block", render a "div"
            element,
            outputting the value of the "style" attribute as the value of the
            "style" attribute and the value of the "styleClass" attribute as the
            value of the "class" attribute. Otherwise, if the "layout" attribute
            is not present, or the "layout" attribute contains a value other
            than
            "block", render a "span" element, outputting the value of the
            "style" attribute as the value of the "style" attribute, and the
            value
            of the "styleClass" attribute as the value of the "class"
            attribute.
        </description>
        <tag-name>panelGroup</tag-name>
        <component>
            <component-type>javax.faces.HtmlPanelGroup</component-type>
            <renderer-type>javax.faces.Group</renderer-type>
        </component>
        <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 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>boolean</type>
        </attribute>
        <attribute>
            <description>
                The type of layout markup to use when rendering this group.
                If the value is "block" the renderer must produce an HTML
                "div" element. Otherwise HTML "span" element must
                be produced.
            </description>
            <name>layout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" property on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Renders an HTML "input" element of type "checkbox".&lt;/p&gt;
            &lt;p&gt;Decode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Obtain the &lt;code&gt;Map&lt;/code&gt; from the
            "requestParameterMap"
            property of the &lt;code&gt;ExternalContext&lt;/code&gt;. If there
            is no
            entry in the &lt;code&gt;Map&lt;/code&gt; for the "clientId" of this
            component, pass "false" to the &lt;code&gt;setSubmittedValue()&lt;/code&gt;
            method of the component, which must be an instance of
            &lt;code&gt;EditableValueHolder&lt;/code&gt;. If there is an entry,
            and its
            value is equal, ignoring case and without quotes, to any of the
            Strings: "on", "yes" or "true" pass true to the
            &lt;code&gt;setSubmittedValue()&lt;/code&gt; method of the
            component.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;
            Render the clientId of the component as the value of the "name"
            attribute. If the current value of the component is "true",
            output the "checked" attribute (must be rendered as
            checked="checked").
            If the "styleClass" attribute is specified, render its value as the
            value
            of the "class" attribute.&lt;/p&gt; &lt;/ul&gt;
        </description>
        <tag-name>selectBooleanCheckbox</tag-name>
        <component>
            <component-type>javax.faces.HtmlSelectBooleanCheckbox
            </component-type>
            <renderer-type>javax.faces.Checkbox</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </description>
            <name>value</name>
            <required>false</required>
            <type>java.lang.Boolean</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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span
            class="changed_modified_2_0"&gt;Render&lt;/span&gt; an HTML checkbox
            list.&lt;/p&gt;
            &lt;p&gt;&lt;a name="decode"&gt;Decode Behavior&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;See the &lt;a
            href="SelectManyListbox.html"&gt;"Decode
            Behavior for UISelectMany Components"&lt;/a&gt; section.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Render a "table" element. If the "styleClass" is specified,
            render the value of the "styleClass" attribute as the value of the
            "class" attribute on the "table" element. If the "style", or
            "border" attributes are specified, pass them thru &lt;span
            class="changed_added_2_0"&gt;and render their values as the "style"
            and "border" attributes on the "table", respectively.&lt;/span&gt;
            If
            the "layout" attribute is specified, and its value is
            "pageDirection", render the children elements vertically,
            otherwise horizontally, in the table. If any of the children are
            an instance of SelectItemGroup, render them as a nested table.
            Each of the children are ultimately rendererd as follows. Render
            an "input" element of "type" "checkbox" for each child component.
            Render the "name" attribute on the "input" element with the value
            of the &lt;code&gt;clientId&lt;/code&gt; of the component. Render an
            "id"
            attribute on the "input" element. Each "id" value must be unique.
            If the current SelectItem.isDisabled() returns true, render
            "disabled" as the value of the "disabled" attribute. Close out
            the "input" element. Render a "label" element. Render the "for"
            attribute of the "label" element whose value is the corresponding
            "input" element's "id" value. Render any "style" as the "class"
            attribute on the "label" element. &lt;span
            class="changed_added_2_0"&gt;If the current checkbox would be
            rendered as being checked, and there is a "selectedClass"
            attribute, append a space, followed by the value of the
            "selectedClass" attribute to any existing "class" attribute value
            on the label element. Otherwise, render the value of the
            "selectedClass" attribute as the value of the "class" attribute on
            the label element. If the current checkbox would be rendered as
            being not checked, and there is a "unselectedClass" attribute,
            append a space, followed by the value of the "unselectedClass"
            attribute to any existing "class" attribute value on the label
            element. Otherwise, render the value of the "unselectedClass"
            attribute as the value of the "class" attribute on the label
            element.&lt;/span&gt; Close out the starting "label" element and
            render
            the label value from SelectItem.getLabel(). Close out the "label"
            element. As an exception to the general rules about how to handle
            the "id" attribute, render it as an attribute on the outer "table"
            element, the value of which is the &lt;code&gt;clientId&lt;/code&gt;
            of the
            component per the rules at the beginning of this specification.
            The value of the current SelectItem is rendered as the value of
            the "value" attribute. Coerce the value of the currently rendered
            child to the type of the parent UISelectMany value following the
            Expression Language coercion rules, before comparing the values.
            If the value of the enclosing UISelectMany matches the current
            value, render "checked" as the value of the "checked" attribute.
            See the &lt;a
            href="SelectManyListbox.html"&gt;"Rendering
            the option elements" &lt;/a&gt; specification for
            &lt;code&gt;ListboxRenderer&lt;/code&gt; for more detail on how to
            render the
            "option" elements in this renderer.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>selectManyCheckbox</tag-name>
        <component>
            <component-type>javax.faces.HtmlSelectManyCheckbox</component-type>
            <renderer-type>javax.faces.Checkbox</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Width (in pixels) of the border to be drawn
                around the table containing the options list.
            </description>
            <name>border</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt; Optional
                attribute that is a literal string that is the fully qualified
                class name of a concrete class that implements
                &lt;code&gt;java.util.Collection&lt;/code&gt;, or an EL
                expression that
                evaluates to either 1. such a String, or 2. the
                &lt;code&gt;Class&lt;/code&gt; object itself. &lt;/p&gt;
            </description>
            <name>collectionType</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on disabled options.
            </description>
            <name>disabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on enabled options.
            </description>
            <name>enabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt;
                Flag indicating that, if this component is activated by the
                user,
                The "no selection option", if any, must be hidden.&lt;/p&gt;
            </description>
            <name>hideNoSelectionOption</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Orientation of the options list to be created.
                Valid values are "pageDirection" (list is laid
                out vertically), or "lineDirection" (list is
                laid out horizontally). If not specified, the
                default value is "lineDirection".
            </description>
            <name>layout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on selected options.
            </description>
            <name>selectedClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on unselected options.
            </description>
            <name>unselectedClass</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span
            class="changed_modified_2_0"&gt;Render&lt;/span&gt; an HTML option
            list.&lt;/p&gt;
            &lt;p&gt;Decode Behavior&lt;/p&gt;
            &lt;p&gt;This section documents the decode behavior for all
            renderers
            that handle &lt;code&gt;UISelectMany&lt;/code&gt; or &lt;code&gt;UISelectOne&lt;/code&gt;
            components.&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;&lt;a name="decodeMany"&gt;Decode Behavior for
            &lt;code&gt;UISelectMany&lt;/code&gt; components&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Obtain the &lt;code&gt;Map&lt;/code&gt; from the
            "requestParameterValuesMap" property of the
            &lt;code&gt;ExternalContext&lt;/code&gt;. If the &lt;code&gt;Map&lt;/code&gt;
            contains
            an entry for the "clientId" of the component, pass the value of
            the entry, cast to a &lt;code&gt;String []&lt;/code&gt;, to the
            &lt;code&gt;setSubmittedValue()&lt;/code&gt; method of the
            component, which
            must be an &lt;code&gt;EditableValueHolder&lt;/code&gt;. If the
            &lt;code&gt;Map&lt;/code&gt; does not contain an entry, create an
            empty
            &lt;code&gt;String&lt;/code&gt; array and call
            &lt;code&gt;setSubmittedValue()&lt;/code&gt; with it.&lt;/p&gt;
            &lt;p class="changed_modified_2_0"&gt;Please check the javadoc for
            &lt;a
            href="../../javadocs/javax/faces/component/UISelectMany.html#getConvertedvalue"&gt;UISelectMany.getConvertedValue()&lt;/a&gt;
            for additional requirements for renderers that render this kind
            of component.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;&lt;a name="decodeOne"&gt;Decode Behavior for
            &lt;code&gt;UISelectOne&lt;/code&gt; components&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Obtain the &lt;code&gt;Map&lt;/code&gt; from the
            "requestParameterMap"
            property of the &lt;code&gt;ExternalContext&lt;/code&gt;. If there
            is a
            &lt;code&gt;Map&lt;/code&gt; entry for the "clientId" property of
            the
            component, pass it to the &lt;code&gt;setSubmittedValue()&lt;/code&gt;
            method
            of the component. &lt;span class="changed_added_2_0"&gt;If the
            &lt;code&gt;Map&lt;/code&gt; does not contain an entry, call
            &lt;code&gt;setSubmittedValue()&lt;/code&gt; passing an empty
            &lt;code&gt;String&lt;/code&gt; as the argument.&lt;/span&gt; &lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Render an HTML "select" element. Render the clientId of
            the component as the value of the "name" attribute. If the
            "styleClass"
            attribute is specified, render its value as the value of the "class"
            attribute on the "select" element. If the component is a
            &lt;code&gt;UISelectMany&lt;/code&gt; instance, render "multiple" as
            the value of the
            "multiple" attribute. If the "size" attribute is specified, render
            its
            value as the value of the "size" attribute. Otherwise use the number
            of
            items as the value of the "size" attribute.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;&lt;a name="option"&gt;Rendering the "option" elements&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;The only valid children of this component are
            &lt;code&gt;UISelectItem&lt;/code&gt; or &lt;code&gt;UISelectItems&lt;/code&gt;
            instances. Iterate over the children of this component, and accrue
            a list of &lt;code&gt;javax.faces.model.SelectItem&lt;/code&gt;
            instances.
            &lt;span class="changed_added_2_0"&gt;If the current child is a
            &lt;code&gt;SelectItem&lt;/code&gt; whose &lt;code&gt;noSelctionProperty&lt;/code&gt;
            is
            &lt;code&gt;true&lt;/code&gt;, &lt;b&gt;and&lt;/b&gt; the &lt;code&gt;UISelectOne&lt;/code&gt;
            or
            &lt;code&gt;UISelectMany&lt;/code&gt; parent of this option has one
            or more
            selected values that &lt;b&gt;are not&lt;/b&gt; the "no selection"
            &lt;code&gt;SelectItem&lt;/code&gt;, &lt;b&gt;and&lt;/b&gt; the
            component has a
            "hideNoSelectionLabel" attribute whose value is &lt;code&gt;true&lt;/code&gt;,
            then the current option, which is the "no selection" option, must
            not be rendered.&lt;/span&gt; If the current child is a
            &lt;code&gt;UISelectItem&lt;/code&gt; create a &lt;code&gt;SelectItem&lt;/code&gt;instance
            from its &lt;code&gt;itemValue, itemLabel&lt;/code&gt;, &lt;code
            class="changed_added_2_0"&gt;itemEscaped&lt;/code&gt;, and
            &lt;code&gt;itemDescription&lt;/code&gt; properties, add it to the
            list. If
            the current child is a &lt;code&gt;UISelectItems&lt;/code&gt;
            instance, call
            its &lt;code&gt;getValue()&lt;/code&gt; method. If the result is a
            &lt;code&gt;SelectItem&lt;/code&gt; bean, add it to the list. If the
            result
            is an array of &lt;code&gt;SelectItem&lt;/code&gt; beans, add each
            one to the
            list. If the result is a &lt;code&gt;Collection&lt;/code&gt; of
            &lt;code&gt;SelectItem&lt;/code&gt; beans, add each one to the list.
            If the
            result is a &lt;code&gt;Map&lt;/code&gt;, create a &lt;code&gt;SelectItem&lt;/code&gt;
            bean for each entry in the &lt;code&gt;Map&lt;/code&gt; using the
            key as the
            label, the value as the value, and &lt;code&gt;null&lt;/code&gt; as
            the
            description.&lt;/p&gt;
            &lt;p&gt;Iterate over the list of &lt;code&gt;SelectItem&lt;/code&gt;
            beans. If the
            current element is a &lt;code&gt;SelectItemGroup&lt;/code&gt;,
            render an
            "optgroup" element with a "label" attribute, the value of which is
            the "label" property from the current element, then call
            &lt;code&gt;getSelectItems()&lt;/code&gt; and render each element as
            below.
            If the current element is not a &lt;code&gt;SelectItemGroup&lt;/code&gt;,
            render an "option" element. Follow the conversion rules in the
            spec to obtain a renderable &lt;code&gt;String&lt;/code&gt; from the
            "value"
            property of the current element, render that as the value of the
            "value" atribute. Now it is time to see if the current element is
            the selected value. Call its &lt;code&gt;getSubmittedValue()&lt;/code&gt;
            method, casting the result to an &lt;code&gt;Object []&lt;/code&gt;,
            otherwise
            the component must be a &lt;code&gt;UISelectOne&lt;/code&gt;
            instance, call
            its &lt;code&gt;getSubmittedValue()&lt;/code&gt; method and create
            an
            &lt;code&gt;Object []&lt;/code&gt; around the result. Determine the
            type of
            the resultant array, if the resultant array is non-null, otherwise
            the type is &lt;code&gt;String&lt;/code&gt;. Coerce the current item
            value to
            this type following the Expression Language coercion rules. If
            the resultant array is non-null, we look in the array for a value
            that, when we pass the renderable value to its
            &lt;code&gt;equals()&lt;/code&gt; method, it returns &lt;code&gt;true&lt;/code&gt;,
            meaning the current element is selected. If the resultant array
            is &lt;code&gt;null&lt;/code&gt;, if the component is a
            &lt;code&gt;UISelectMany&lt;/code&gt;, call its &lt;code&gt;getValue()&lt;/code&gt;
            method. If the result is a &lt;code&gt;List&lt;/code&gt; obtain the
            values in
            the list as an array. Otherwise, the component must be a
            &lt;code&gt;UISelectOne&lt;/code&gt; instance. Call its
            &lt;code&gt;getValue()&lt;/code&gt; method, which must be an Object
            array.
            Look for an element in the resultant array that, 1. when we pass
            the renderable value to its &lt;code&gt;equals()&lt;/code&gt;
            method, it
            returns &lt;code&gt;true&lt;/code&gt; , or 2. if the renderable
            value is null,
            and there is a null element in the array, also conclude that the
            current element is selected. Otherwise the current element is not
            selected. Now, if the current value is selected, write out an
            HTML boolean property "selected". If the current
            SelectItem.isDisabled() returns true, render "disabled" as the
            value of the "disabled" attribute. &lt;span
            class="changed_added_2_0"&gt;If the value of the &lt;code&gt;escape&lt;/code&gt;
            property is true, use the &lt;code&gt;writeText()&lt;/code&gt;
            method of
            &lt;code&gt;ResponseWriter&lt;/code&gt; to write out the value of
            the
            &lt;code&gt;label&lt;/code&gt; property. Otherwise, use the
            &lt;code&gt;write()&lt;/code&gt; method of the &lt;code&gt;ResponseWriter&lt;/code&gt;
            to
            do so.&lt;/span&gt;&lt;/p&gt;
            &lt;/ul&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>selectManyListbox</tag-name>
        <component>
            <component-type>javax.faces.HtmlSelectManyListbox</component-type>
            <renderer-type>javax.faces.Listbox</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt; Optional
                attribute that is a literal string that is the fully qualified
                class name of a concrete class that implements
                &lt;code&gt;java.util.Collection&lt;/code&gt;, or an EL
                expression that
                evaluates to either 1. such a String, or 2. the
                &lt;code&gt;Class&lt;/code&gt; object itself. &lt;/p&gt;
            </description>
            <name>collectionType</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on disabled options.
            </description>
            <name>disabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on enabled options.
            </description>
            <name>enabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt;
                Flag indicating that, if this component is activated by the
                user,
                The "no selection option", if any, must be hidden.&lt;/p&gt;
            </description>
            <name>hideNoSelectionOption</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Number of available options to be shown at all times.
                If not specified, all available options are shown.
            </description>
            <name>size</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span
            class="changed_modified_2_0"&gt;Render&lt;/span&gt; an HTML option
            list.&lt;/p&gt;
            &lt;p&gt;&lt;a name="decode"&gt;Decode Behavior&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;See the &lt;a
            href="SelectManyListbox.html"&gt;"Decode
            Behavior for UISelectMany Components"&lt;/a&gt; section.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Render an HTML "select" element. Render the clientId of
            the component as the value of the "name" attribute. If the
            "styleClass"
            attribute is specified, render its value as the value of the "class"
            attribute on the "select" element. If the component
            to be rendered is a UISelectMany, render "multiple" as the value of
            the "multiple" attribute. Render "1" as the value of the "size"
            attribute. See the &lt;a
            href="SelectManyListbox.html"&gt;"Rendering the option
            elements" &lt;/a&gt; specification for &lt;code&gt;ListboxRenderer&lt;/code&gt;
            for
            more detail on how to render the "option" elements in this
            renderer.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>selectManyMenu</tag-name>
        <component>
            <component-type>javax.faces.HtmlSelectManyMenu</component-type>
            <renderer-type>javax.faces.Menu</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt; Optional
                attribute that is a literal string that is the fully qualified
                class name of a concrete class that implements
                &lt;code&gt;java.util.Collection&lt;/code&gt;, or an EL
                expression that
                evaluates to either 1. such a String, or 2. the
                &lt;code&gt;Class&lt;/code&gt; object itself. &lt;/p&gt;
            </description>
            <name>collectionType</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on disabled options.
            </description>
            <name>disabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on enabled options.
            </description>
            <name>enabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt;
                Flag indicating that, if this component is activated by the
                user,
                The "no selection option", if any, must be hidden.&lt;/p&gt;
            </description>
            <name>hideNoSelectionOption</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Render an HTML option list.&lt;/p&gt;
            &lt;p&gt;&lt;a name="decode"&gt;Decode Behavior&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;See the &lt;a
            href="SelectManyListbox.html"&gt;"Decode
            Behavior for UISelectOne Components"&lt;/a&gt; section.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Render an HTML "select" element. Render the clientId of
            the component as the value of the "name" attribute. If the
            "styleClass"
            attribute is specified, render its value as the value of the "class"
            attribute on the "select" element. If the component
            to be rendered is a UISelectMany, render "multiple" as the value of
            the "multiple" attribute. If the "size" attribute is specified,
            render its value as the value of the "size" attribute. Otherwise
            use the number of items as the value of the "size" attribute. See
            the &lt;a href="SelectManyListbox.html"&gt;"Rendering the option
            elements" &lt;/a&gt; specification for &lt;code&gt;ListboxRenderer&lt;/code&gt;
            for
            more detail on how to render the "option" elements in this
            renderer.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>selectOneListbox</tag-name>
        <component>
            <component-type>javax.faces.HtmlSelectOneListbox</component-type>
            <renderer-type>javax.faces.Listbox</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on disabled options.
            </description>
            <name>disabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on enabled options.
            </description>
            <name>enabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt;
                Flag indicating that, if this component is activated by the
                user,
                The "no selection option", if any, must be hidden.&lt;/p&gt;
            </description>
            <name>hideNoSelectionOption</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                Number of available options to be shown at all times.
                If not specified, all available options are shown.
            </description>
            <name>size</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Render an HTML option list.&lt;/p&gt;
            &lt;p&gt;&lt;a name="decode"&gt;Decode Behavior&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;See the &lt;a
            href="SelectManyListbox.html"&gt;"Decode
            Behavior for UISelectOne Components"&lt;/a&gt; section.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Render an HTML "select" element. Render the clientId of the
            component as the value of the "name" attribute. If the
            "styleClass" attribute is specified, render its value as the value
            of the "class" attribute on the "select" element. If the component
            to be rendered is a UISelectMany, render "true" as the value of
            the "multiple" attribute. Use the number of items as the value of
            the "size" attribute. See the &lt;a
            href="SelectManyListbox.html"&gt;"Rendering
            the option elements" &lt;/a&gt; specification for
            &lt;code&gt;ListboxRenderer&lt;/code&gt; for more detail on how to
            render the
            "option" elements in this renderer.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>selectOneMenu</tag-name>
        <component>
            <component-type>javax.faces.HtmlSelectOneMenu</component-type>
            <renderer-type>javax.faces.Menu</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on disabled options.
            </description>
            <name>disabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on enabled options.
            </description>
            <name>enabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt;
                Flag indicating that, if this component is activated by the
                user,
                The "no selection option", if any, must be hidden.&lt;/p&gt;
            </description>
            <name>hideNoSelectionOption</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;&lt;span
            class="changed_modified_2_0"&gt;Render&lt;/span&gt; a set of html
            "input" elements of type "radio".&lt;/p&gt;
            &lt;p&gt;&lt;a name="decode"&gt;Decode Behavior&lt;/a&gt;&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;See the &lt;a
            href="SelectManyListbox.html"&gt;"Decode
            Behavior for UISelectOne Components"&lt;/a&gt; section.&lt;/p&gt;
            &lt;/ul&gt;
            &lt;p&gt;Encode Behavior&lt;/p&gt;
            &lt;ul&gt;
            &lt;p&gt;Render a "table" element. If the "styleClass" is specified,
            render the value of the "styleClass" attribute as the value of the
            "class" attribute on the "table" element. If the "style", "border"
            attributes are specified, pass them thru &lt;span
            class="changed_added_2_0"&gt;and render their values as the "style"
            and "border" attributes on the "table", respectively.&lt;/span&gt;.
            If
            the "layout" attribute is specified, and its value is
            "pageDirection", render the children elements vertically,
            otherwise horizontally, in the table. If any of the children are
            an instance of SelectItemGroup, render them as a nested table.
            Each of the children are ultimately rendered as follows. Render
            an "input" element of "type" "radio" for each child component.
            Render the "name" attribute on the "input" element with the value
            of the &lt;code&gt;clientId&lt;/code&gt; of the component. Render an
            "id"
            attribute on the "input" element. Each "id" value must be unique.
            If the current SelectItem.isDisabled() returns true, render
            "disabled" as the value of the "disabled" attribute. Close out
            the "input" element. Render a "label" element. Render the "for"
            attribute of the "label" element whose value is the corresponding
            "input" element's "id" value. Render any "style" as the "class"
            attribute on the "label" element. Close out the starting "label"
            element and render the label value from SelectItem.getLabel().
            Close out the "label" element. As an exception to the general
            rules about how to handle the "id" attribute, render it as an
            attribute on the outer "table" element, the value of which is the
            &lt;code&gt;clientId&lt;/code&gt; of the component per the rules at
            the
            beginning of this specification. Coerce the value of the
            currently rendered child to the type of the parent UISelectOne
            value using the Expression Language coercion rules before
            comparing the values. If the value of the currently rendered
            child is equal to the value of the parent UISelectOne, render an
            appropriate HTML boolean value indicating "checked" for the
            enclosing "input". See the &lt;a
            href="SelectManyListbox.html"&gt;"Rendering
            the option elements" &lt;/a&gt; specification for
            &lt;code&gt;ListboxRenderer&lt;/code&gt; for more detail on how to
            render the
            "option" elements in this renderer.&lt;/p&gt;
            &lt;/ul&gt;
        </description>
        <tag-name>selectOneRadio</tag-name>
        <component>
            <component-type>javax.faces.HtmlSelectOneRadio</component-type>
            <renderer-type>javax.faces.Radio</renderer-type>
        </component>
        <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 this component's value must be
                converted and validated immediately (that is, during
                Apply Request Values phase), rather than waiting
                until Process Validations phase.
            </description>
            <name>immediate</name>
            <required>false</required>
            <type>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>boolean</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>
                The current value of this component.
            </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>
                Access key that, when pressed, transfers focus
                to this element.
            </description>
            <name>accesskey</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Width (in pixels) of the border to be drawn
                around the table containing the options list.
            </description>
            <name>border</name>
            <required>false</required>
            <type>int</type>
        </attribute>
        <attribute>
            <description>
                Direction indication for text that does not inherit
                directionality.
                Valid values are "LTR" (left-to-right) and "RTL"
                (right-to-left).
            </description>
            <name>dir</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this element must never receive focus or
                be included in a subsequent submit. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as disabled="disabled".
            </description>
            <name>disabled</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on disabled options.
            </description>
            <name>disabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                CSS style class to apply to the rendered label
                on enabled options.
            </description>
            <name>enabledClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                &lt;p class="changed_modified_2_0"&gt;
                Flag indicating that, if this component is activated by the
                user,
                The "no selection option", if any, must be hidden.&lt;/p&gt;
            </description>
            <name>hideNoSelectionOption</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                A localized user presentable name for this component.
            </description>
            <name>label</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Code describing the language used in the generated markup
                for this component.
            </description>
            <name>lang</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Orientation of the options list to be created.
                Valid values are "pageDirection" (list is laid
                out vertically), or "lineDirection" (list is
                laid out horizontally). If not specified, the
                default value is "lineDirection".
            </description>
            <name>layout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus.
            </description>
            <name>onblur</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element loses focus
                and its value has been modified since gaining focus.
            </description>
            <name>onchange</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                clicked over this element.
            </description>
            <name>onclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                double clicked over this element.
            </description>
            <name>ondblclick</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when this element receives focus.
            </description>
            <name>onfocus</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed down over this element.
            </description>
            <name>onkeydown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                pressed and released over this element.
            </description>
            <name>onkeypress</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a key is
                released over this element.
            </description>
            <name>onkeyup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                pressed down over this element.
            </description>
            <name>onmousedown</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved within this element.
            </description>
            <name>onmousemove</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved away from this element.
            </description>
            <name>onmouseout</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                moved onto this element.
            </description>
            <name>onmouseover</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when a pointer button is
                released over this element.
            </description>
            <name>onmouseup</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Javascript code executed when text within this
                element is selected by the user.
            </description>
            <name>onselect</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this component will prohibit changes by
                the user. The element may receive focus unless it has also
                been disabled. A value of false causes
                no attribute to be rendered, while a value of true causes the
                attribute to be rendered as readonly="readonly".
            </description>
            <name>readonly</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
        <attribute>
            <description>
                CSS style(s) to be applied when this component is rendered.
            </description>
            <name>style</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) to be applied when
                this element is rendered. This value must be passed through
                as the "class" attribute on generated markup.
            </description>
            <name>styleClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Position of this element in the tabbing order
                for the current document. This value must be
                an integer between 0 and 32767.
            </description>
            <name>tabindex</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Advisory title information about markup elements generated
                for this component.
            </description>
            <name>title</name>
            <required>false</required>
            <type>java.lang.String</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>
    </tag>
    <tag>
        <description>
            &lt;p&gt;Renders a UIComponent that represents a single column of
            data within a parent &lt;code&gt;UIData&lt;/code&gt; component.&lt;/p&gt;
        </description>
        <tag-name>column</tag-name>
        <component>
            <component-type>javax.faces.Column</component-type>
            <renderer-type/>
        </component>
        <attribute>
            <description>
                Flag indicating whether or not this component should be rendered
                (during Render Response Phase), or processed on any subsequent
                form submit.
            </description>
            <name>rendered</name>
            <required>false</required>
            <type>java.lang.Boolean</type>
        </attribute>
        <attribute>
            <description>
                The value binding expression 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>
                The component identifier for the associated component
            </description>
            <name>id</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) that will be
                applied to any column footer generated for this table.
            </description>
            <name>footerClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Space-separated list of CSS style class(es) that will be
                applied to any column header generated for this table.
            </description>
            <name>headerClass</name>
            <required>false</required>
            <type>java.lang.String</type>
        </attribute>
        <attribute>
            <description>
                Flag indicating that this column is a row header column and
                therefore cells in this column should be rendered with "th"
                instead of "td" and must have the 'scope="row"' attribute.
            </description>
            <name>rowHeader</name>
            <required>false</required>
            <type>boolean</type>
        </attribute>
    </tag>
</facelet-taglib>
