001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package com.sun.rave.web.ui.component;
042:
043: import java.io.IOException;
044: import javax.faces.component.UIComponent;
045: import javax.faces.context.FacesContext;
046: import javax.faces.el.MethodBinding;
047: import javax.faces.el.ValueBinding;
048:
049: /**
050: * <p>Use the <code>ui:textArea</code> tag to create a multiple-line
051: * input field for text.</p>
052: *
053: * <h3>HTML Elements and Layout</h3>
054: *
055: * <p>The textArea component renders an HTML <textarea> element.</p>
056: *
057: * <h3>Configuring the <code>ui:textArea</code> Tag</h3>
058: *
059: * <p>Use the <code>text</code> attribute to associate
060: * the component with a model object that represents the current value,
061: * by setting the attribute's value to a JavaServer Faces EL expression
062: * that evaluates to a backing bean or a backing bean property.</p>
063: *
064: * <p>To optionally specify a label for the component, use the
065: * <code>label</code> attribute, or specify a label facet.</p>
066: *
067: * <h3>Facets</h3>
068: *
069: * <ul>
070: * <li><code>label</code>: use this facet to specify a custom
071: * component for the label.</li>
072: * <li><code>readOnly</code>: use this facet to specify a custom
073: * component for displaying the readOnly value of this component.</li>
074: * </ul>
075: *
076: * <h3>Theme Identifiers</h3>
077: *
078: * <p>The input element has a style class "TxtAra", or "TxtAraDis"
079: * when the field is disabled. If a label attribute is specified, the
080: * label element's class attribute is set to "LstAln" followed by
081: * "LblLvl1Txt", "LblLvl2Txt" or "LblLvl3Txt" depending on the label
082: * level.</p>
083: *
084: *
085: * <h3>Client-side JavaScript functions</h3>
086: *
087: * <p>In all the functions below, <code><id></code> should be
088: * the generated id of the TextArea component.
089: *
090: * <table cellpadding="2" cellspacing="2" border="1"
091: * style="text-align: left; width: 100%;">
092: * <tbody>
093: * <tr>
094: * <td style="vertical-align">
095: * <code>field_setDisabled(<id>, <disabled>)</code>
096: * </td>
097: * <td style="vertical-align: top">
098: * Enable/disable the field. Set <code><disabled></code>
099: * to true to disable the component, or false to enable it.
100: * </td>
101: * </tr>
102: * <tr>
103: * <td style="vertical-align: top">
104: * <code>field_setValue(<id>, <newValue>)</code>
105: * </td>
106: * <td style="vertical-align: top">
107: * Set the value of the field to <code><newValue></code>.
108: * </td>
109: * </tr>
110: * <tr>
111: * <td style="vertical-align: top">
112: * <code>field_getValue(<id>)</code>
113: * </td>
114: * <td style="vertical-align: top">Get the value of the field.</td>
115: * </tr>
116: * <tr>
117: * <td style="vertical-align: top">
118: * <code>field_getInputElement(<id>)</code></td>
119: * <td style="vertical-align: top">
120: * Get hold of a reference to the textArea element rendered by this
121: * component.
122: * </td>
123: * </tr>
124: * <tr>
125: * <td style="vertical-align: top">
126: * <code>component_setVisible(<id>)</code>
127: * </td>
128: * <td style="vertical-align: top">Hide or show this component.
129: * </td>
130: * </tr>
131: * </tbody>
132: * </table>
133: *
134: *
135: * <h3>Examples</h3>
136: *
137: * <p> This example uses a backing bean <code>FieldTest</code> with a property
138: * string. The tag generates a textarea with a label "Comment:". The
139: * rows and columns attributes have been set, to ensure that the
140: * component has the same size on all browsers. </p>
141: * <pre>
142: * <ui:textArea id="textarea" type="textarea"
143: * label="Comment:"
144: * text="#{FieldTest.string}"
145: * rows="5" columns="50"/>
146: * </pre>
147: * <p>Auto-generated component class.
148: * Do <strong>NOT</strong> modify; all changes
149: * <strong>will</strong> be lost!</p>
150: */
151:
152: public abstract class TextAreaBase extends
153: com.sun.rave.web.ui.component.Field {
154:
155: /**
156: * <p>Construct a new <code>TextAreaBase</code>.</p>
157: */
158: public TextAreaBase() {
159: super ();
160: setRendererType("com.sun.rave.web.ui.TextArea");
161: }
162:
163: /**
164: * <p>Return the identifier of the component family to which this
165: * component belongs. This identifier, in conjunction with the value
166: * of the <code>rendererType</code> property, may be used to select
167: * the appropriate {@link Renderer} for this component instance.</p>
168: */
169: public String getFamily() {
170: return "com.sun.rave.web.ui.TextArea";
171: }
172:
173: // rows
174: private int rows = Integer.MIN_VALUE;
175: private boolean rows_set = false;
176:
177: /**
178: * <p>Number of rows used to render the textarea. You should set a value
179: * for this attribute to ensure that it is rendered correctly in all
180: * browsers. Browsers vary in the default number of rows used for
181: * textarea fields.</p>
182: */
183: public int getRows() {
184: if (this .rows_set) {
185: return this .rows;
186: }
187: ValueBinding _vb = getValueBinding("rows");
188: if (_vb != null) {
189: Object _result = _vb.getValue(getFacesContext());
190: if (_result == null) {
191: return Integer.MIN_VALUE;
192: } else {
193: return ((Integer) _result).intValue();
194: }
195: }
196: return 2;
197: }
198:
199: /**
200: * <p>Number of rows used to render the textarea. You should set a value
201: * for this attribute to ensure that it is rendered correctly in all
202: * browsers. Browsers vary in the default number of rows used for
203: * textarea fields.</p>
204: * @see #getRows()
205: */
206: public void setRows(int rows) {
207: this .rows = rows;
208: this .rows_set = true;
209: }
210:
211: /**
212: * <p>Restore the state of this component.</p>
213: */
214: public void restoreState(FacesContext _context, Object _state) {
215: Object _values[] = (Object[]) _state;
216: super .restoreState(_context, _values[0]);
217: this .rows = ((Integer) _values[1]).intValue();
218: this .rows_set = ((Boolean) _values[2]).booleanValue();
219: }
220:
221: /**
222: * <p>Save the state of this component.</p>
223: */
224: public Object saveState(FacesContext _context) {
225: Object _values[] = new Object[3];
226: _values[0] = super .saveState(_context);
227: _values[1] = new Integer(this .rows);
228: _values[2] = this.rows_set ? Boolean.TRUE : Boolean.FALSE;
229: return _values;
230: }
231:
232: }
|