<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en" xmlns:vdldoc="http://vdldoc.omnifaces.org" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:jakartaee="https://jakarta.ee/xml/ns/jakartaee">
    <head>
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>textarea (Tobago Core VDL Documentation)
			</title>
        <meta name="keywords" content="$title">
        <link rel="stylesheet" type="text/css" title="Style" href="../stylesheet.css">
    </head>
    <body>
        <noscript>
            <div>JavaScript is disabled on your browser.</div>
        </noscript>
        <div class="topNav">
            <a name="navbar_top"></a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow"></a>
            <ul class="navList" title="Navigation">
                <li>
                    <a href="../overview-summary.html">Overview</a>
                </li>
                <li>
                    <a href="tld-summary.html">Library</a>
                </li>
                <li class="navBarCell1Rev">Tag</li>
                <li>
                    <a href="../help-doc.html">Help</a>
                </li>
            </ul>
        </div>
        <div class="subNav">
            <ul class="navList">
                <li>
                    <a target="_top" href="../index.html?tc/textarea.html">
									Frames
								</a>
                </li>
                <li>
                    <a target="_top" href="textarea.html">
									No Frames
								</a>
                </li>
            </ul>
            <ul class="navList" id="alltags_navbar_top">
                <li>
                    <a href="../alltags-noframe.html">All Tags</a>
                </li>
            </ul>
            <div>
                <script type="text/javascript">
								document.getElementById("alltags_navbar_top").style.display = (window == top) ? "block" : "none";
							</script>
            </div>
            <a name="skip-navbar_top"></a>
        </div>
        <div class="header">
            <h1 title="Library" class="title">tc</h1>
            <h2 class="title">
							Tag
							textarea</h2>
        </div>
        <div class="contentContainer">
            <div class="description">
                <ul class="blockList">
                    <li class="blockList">
                        <dl>
                            <dt>Description:</dt>
                            <dd>
                                <div class="block">
      Renders a multi line text input control.<p><b>UIComponentClass: </b>org.apache.myfaces.tobago.component.UITextarea</p><p><b>RendererType: </b><ul><li>Textarea (default)</li></ul></p><p><b>Supported markups:</b></p><dl><dt><b>spread</b></dt><dd>Use the full height for the HTML content.</dd></dl>
    </div>
                            </dd>
                        </dl>
                    </li>
                </ul>
            </div>
            <div class="summary">
                <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Component summary table, listing component information">
                    <caption>
                        <span>Component Information</span><span class="tabEnd">&nbsp;</span>
                    </caption>
                    <thead>
                        <tr>
                            <th class="colFirst" scope="col">Info</th><th class="colLast" scope="col">Value</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class="rowColor">
                            <td class="colFirst">Component Type</td><td class="colLast"><code>org.apache.myfaces.tobago.Textarea</code></td>
                        </tr>
                        <tr class="altColor">
                            <td class="colFirst">Handler Class</td><td class="colLast"><code>org.apache.myfaces.tobago.facelets.TobagoComponentHandler</code></td>
                        </tr>
                        <tr class="rowColor">
                            <td class="colFirst">Renderer Type</td><td class="colLast"><code>Textarea</code></td>
                        </tr>
                        <tr class="altColor">
                            <td class="colFirst">Description</td><td class="colLast"><i>None</i></td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <div class="summary">
                <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Attribute summary table, listing attribute information">
                    <caption>
                        <span>Attributes</span><span class="tabEnd">&nbsp;</span>
                    </caption>
                    <thead>
                        <tr>
                            <th class="colFirst">Name</th><th class="colOne">Required</th><th class="colOne">Type</th><th class="colLast">Description</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr id="accessKey" class="rowColor">
                            <td class="colFirst"><a href="#accessKey"><code>accessKey</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Character</code>)
					</td><td class="colLast">
        The access key of this control.<br />Type: <code>java.lang.Character</code>
      </td>
                        </tr>
                        <tr id="binding" class="altColor">
                            <td class="colFirst"><a href="#binding"><code>binding</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>javax.faces.component.UIComponent</code>)
					</td><td class="colLast">
        The value binding expression linking this component to a property in a backing bean.
 For Facelets, the component is the outer UIPanel, not the input control.<br />Type: <code>javax.faces.component.UIComponent</code>
      </td>
                        </tr>
                        <tr id="converter" class="rowColor">
                            <td class="colFirst"><a href="#converter"><code>converter</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>javax.faces.convert.Converter</code>)
					</td><td class="colLast">
        An expression that specifies the Converter for this component.
 If the value binding expression is a String,
 the String is used as an ID to look up a Converter.
 If the value binding expression is a Converter,
 uses that instance as the converter.
 The value can either be a static value (ID case only)
 or an EL expression.<br />Type: <code>javax.faces.convert.Converter</code>
      </td>
                        </tr>
                        <tr id="converterMessage" class="altColor">
                            <td class="colFirst"><a href="#converterMessage"><code>converterMessage</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.String</code>)
					</td><td class="colLast">
        An expression that specifies the converter message.
 If present, will be used as the text of the converter message, replacing any message that comes from the converter.<br />Type: <code>java.lang.String</code>
      </td>
                        </tr>
                        <tr id="disabled" class="rowColor">
                            <td class="colFirst"><a href="#disabled"><code>disabled</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Boolean</code>)
					</td><td class="colLast">
        Flag indicating that this element is disabled.<br />Type: <code>boolean</code><br />Default: <code>false</code>
      </td>
                        </tr>
                        <tr id="focus" class="altColor">
                            <td class="colFirst"><a href="#focus"><code>focus</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Boolean</code>)
					</td><td class="colLast">
        Flag indicating this component should receive the focus.<br />Type: <code>boolean</code><br />Default: <code>false</code>
      </td>
                        </tr>
                        <tr id="help" class="rowColor">
                            <td class="colFirst"><a href="#help"><code>help</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.String</code>)
					</td><td class="colLast">
        Text value to display as a help.<br />Type: <code>java.lang.String</code>
      </td>
                        </tr>
                        <tr id="id" class="altColor">
                            <td class="colFirst"><a href="#id"><code>id</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>java.lang.String</code></td><td class="colLast">
        The component identifier for this component.
 This value must be unique within the closest parent component that is a naming container.<br />Type: <code>java.lang.String</code>
      </td>
                        </tr>
                        <tr id="label" class="rowColor">
                            <td class="colFirst"><a href="#label"><code>label</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.String</code>)
					</td><td class="colLast">
        A localized user presentable label for this component.<br />Type: <code>java.lang.String</code>
      </td>
                        </tr>
                        <tr id="labelLayout" class="altColor">
                            <td class="colFirst"><a href="#labelLayout"><code>labelLayout</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>org.apache.myfaces.tobago.component.LabelLayout</code>)
					</td><td class="colLast">
        Defines the position of the label relative to the field.
 The default is flexLeft, if the label is set, or none, if the label isn't set.
 Set to 'skip' to avoid surrounding label container.
 Hint for tc:out: set also compact=true to render only text (without html tags).<br />Type: <code>org.apache.myfaces.tobago.component.LabelLayout</code>
      </td>
                        </tr>
                        <tr id="markup" class="rowColor">
                            <td class="colFirst"><a href="#markup"><code>markup</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>org.apache.myfaces.tobago.context.Markup</code>)
					</td><td class="colLast">
        Indicate markup of this component.
 The allowed markups can be defined or overridden in the theme.
 The value 'none' should not be used any longer. Just leave the attribute empty, or use a NULL pointer.<br />Type: <code>org.apache.myfaces.tobago.context.Markup</code>
      </td>
                        </tr>
                        <tr id="placeholder" class="altColor">
                            <td class="colFirst"><a href="#placeholder"><code>placeholder</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.String</code>)
					</td><td class="colLast">
        <p>
 Displays a short text in the input field, that describes the meaning of this field.
 This is part of HTML 5, the theme should emulate the behaviour, when the browser doesn't support it.
 </p>
 <p>
 The text will not be displayed, when the input field is readonly or disabled.
 </p><br />Type: <code>java.lang.String</code>
      </td>
                        </tr>
                        <tr id="readonly" class="rowColor">
                            <td class="colFirst"><a href="#readonly"><code>readonly</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Boolean</code>)
					</td><td class="colLast">
        Flag indicating that this component will prohibit changes by the user.<br />Type: <code>boolean</code><br />Default: <code>false</code>
      </td>
                        </tr>
                        <tr id="rendered" class="altColor">
                            <td class="colFirst"><a href="#rendered"><code>rendered</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Boolean</code>)
					</td><td class="colLast">
        Flag indicating whether or not this component should be rendered
 (during Render Response Phase), or processed on any subsequent form submit.<br />Type: <code>boolean</code><br />Default: <code>true</code>
      </td>
                        </tr>
                        <tr id="required" class="rowColor">
                            <td class="colFirst"><a href="#required"><code>required</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Boolean</code>)
					</td><td class="colLast">
        Flag indicating that a value is required.
 If the value is an empty string a
 ValidationError occurs and a Error Message is rendered.<br />Type: <code>boolean</code><br />Default: <code>false</code>
      </td>
                        </tr>
                        <tr id="requiredMessage" class="altColor">
                            <td class="colFirst"><a href="#requiredMessage"><code>requiredMessage</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.String</code>)
					</td><td class="colLast">
        An expression that specifies the required message<br />Type: <code>java.lang.String</code>
      </td>
                        </tr>
                        <tr id="rows" class="rowColor">
                            <td class="colFirst"><a href="#rows"><code>rows</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Integer</code>)
					</td><td class="colLast">
        The row count for this component.<br />Type: <code>java.lang.Integer</code>
      </td>
                        </tr>
                        <tr id="sanitize" class="altColor">
                            <td class="colFirst"><a href="#sanitize"><code>sanitize</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>org.apache.myfaces.tobago.sanitizer.SanitizeMode</code>)
					</td><td class="colLast">
        Should HTML content sanitized?
 The effect of sanitizing depends on the configuration.
 The value "auto" means, that sanitizing take place for
 <ul>
   <li>tc:out when escape="false" or</li>
   <li>tc:textarea when attribute data-html-editor is set,</li>
 </ul>
 because that are the critical parts.<br />Type: <code>org.apache.myfaces.tobago.sanitizer.SanitizeMode</code><br />Default: <code>auto</code><br />Allowed Values: <code>[auto, never]</code>
      </td>
                        </tr>
                        <tr id="tabIndex" class="rowColor">
                            <td class="colFirst"><a href="#tabIndex"><code>tabIndex</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Integer</code>)
					</td><td class="colLast">
        Controls the navigation of the focus through the
 input controls on a page with the Tab-Key.
 The navigation starts from the element with
 the lowest tabIndex value to the element with the highest value.
 Elements that have identical tabIndex values should be navigated
 in the order they appear in the character stream
 Elements that are disabled or with a negative tabIndex
 do not participate in the tabbing order.<br />Type: <code>java.lang.Integer</code>
      </td>
                        </tr>
                        <tr id="tip" class="altColor">
                            <td class="colFirst"><a href="#tip"><code>tip</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.String</code>)
					</td><td class="colLast">
        Text value to display as tooltip.<br />Type: <code>java.lang.String</code>
      </td>
                        </tr>
                        <tr id="validator" class="rowColor">
                            <td class="colFirst"><a href="#validator"><code>validator</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>java.lang.String</code></td><td class="colLast">
        A method binding EL expression,
 accepting FacesContext, UIComponent,
 and Object parameters, and returning void, that validates
 the component's local value.
      </td>
                        </tr>
                        <tr id="validatorMessage" class="altColor">
                            <td class="colFirst"><a href="#validatorMessage"><code>validatorMessage</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.String</code>)
					</td><td class="colLast">
        An expression that specifies the validator message.
 If present, will be used as the text of the validator message, replacing any message that comes from the validator.<br />Type: <code>java.lang.String</code>
      </td>
                        </tr>
                        <tr id="value" class="rowColor">
                            <td class="colFirst"><a href="#value"><code>value</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>javax.el.ValueExpression</code>
                                <br>
                                (<i>must evaluate to </i><code>java.lang.Object</code>)
					</td><td class="colLast">
        The current value of this component.<br />Type: <code>java.lang.Object</code>
      </td>
                        </tr>
                        <tr id="valueChangeListener" class="altColor">
                            <td class="colFirst"><a href="#valueChangeListener"><code>valueChangeListener</code></a></td><td class="colOne"><code>false</code></td><td class="colOne"><code>java.lang.String</code></td><td class="colLast">
        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 ValueChangeEvent
 parameter, with a return type of void.
      </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
        <div class="bottomNav">
            <a name="navbar_bottom"></a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow"></a>
            <ul class="navList" title="Navigation">
                <li>
                    <a href="../overview-summary.html">Overview</a>
                </li>
                <li>
                    <a href="tld-summary.html">Library</a>
                </li>
                <li class="navBarCell1Rev">Tag</li>
                <li>
                    <a href="../help-doc.html">Help</a>
                </li>
            </ul>
        </div>
        <div class="subNav">
            <ul class="navList">
                <li>
                    <a target="_bottom" href="../index.html?tc/textarea.html">
									Frames
								</a>
                </li>
                <li>
                    <a target="_bottom" href="textarea.html">
									No Frames
								</a>
                </li>
            </ul>
            <ul class="navList" id="alltags_navbar_bottom">
                <li>
                    <a href="../alltags-noframe.html">All Tags</a>
                </li>
            </ul>
            <script type="text/javascript">
							document.getElementById("alltags_navbar_bottom").style.display = (window == top) ? "block" : "none";
						</script><a name="skip-navbar_bottom"></a>
        </div>
        <p class="about">
            Output generated by <a href="http://vdldoc.omnifaces.org" target="_blank">Vdldoc</a> View Declaration Language Documentation Generator.
        </p>
    </body>
</html>
