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:textField</code> tag to create an input field for a single line of text.</p>
051: *
052: * <h3>HTML Elements and Layout</h3>
053: *
054: * <p>The textField component renders an XHTML <code><input
055: * type="text"></code>element.</p>
056: *
057: * <h3>Configuring the <code>ui:textField</code> Tag</h3>
058: *
059: * <p>Use the <code>text</code> attribute to associate the component with
060: * a model object that represents the current value, by setting the
061: * attribute's value to an EL expression that corresponds to a property
062: * of a backing bean.</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 value of this component when it is
074: * marked as readonly. The default is a <code>ui:staticText</code>. </li>
075: * </ul>
076: *
077: *
078: * <h3>Client-side JavaScript functions</h3>
079: *
080: * <p>In all the functions below, <code><id></code> should be
081: * the generated id of the TextField component. </p>
082: *
083: * <table cellpadding="2" cellspacing="2" border="1"
084: * style="text-align: left; width: 100%;">
085: * <tbody>
086: * <tr>
087: * <td style="vertical-align">
088: * <code>field_setDisabled(<id>, <disabled>)</code>
089: * </td>
090: * <td style="vertical-align: top">
091: * Enable/disable the field. Set <code><disabled></code>
092: * to true to disable the component, or false to enable it.
093: * </td>
094: * </tr>
095: * <tr>
096: * <td style="vertical-align: top">
097: * <code>field_setValue(<id>, <newValue>)</code>
098: * </td>
099: * <td style="vertical-align: top">
100: * Set the value of the field to <code><newValue></code>.
101: * </td>
102: * </tr>
103: * <tr>
104: * <td style="vertical-align: top">
105: * <code>field_getValue(<id>)</code>
106: * </td>
107: * <td style="vertical-align: top">Get the value of the field.</td> </tr>
108: * <tr>
109: * <td style="vertical-align: top">
110: * <code>field_getInputElement(<id>)</code></td>
111: * <td style="vertical-align: top">
112: * Get hold of a reference to the input element rendered by this
113: * component.
114: * </td>
115: * </tr>
116: * <tr>
117: * <td style="vertical-align: top">
118: * <code>component_setVisible(<id>)</code>
119: * </td>
120: * <td style="vertical-align: top">Hide or show this component.
121: * </td>
122: * </tr>
123: * </tbody>
124: * </table>
125: *
126: *
127: * <h3>Examples</h3>
128: *
129: * <h4>Example 1: Text field with label and required icon</h4>
130: *
131: * <p>This example uses a backing bean <code>FieldTest</code> with a
132: * property <code>string</code>. The tag generates a label followed by
133: * text input field. The required attribute is set to true, which causes
134: * an icon to be rendered next to the label to indicate that the
135: * application user must enter a value in the text field. The icon, label
136: * and input elements are enclosed by a span.</p>
137: * <pre>
138: * <ui:textField id="textfield" label="Enter a value:"
139: * text="#{FieldTest.string}"
140: * required="true"/>
141: * </pre>
142: *
143: * <h4>Example 2: Text field using a validator</h4>
144: *
145: * <p>
146: * This example uses a backing bean <code>FieldTest</code> with a
147: * property <code>number</code>. The number property is an
148: * <code>int</code>, which means that the value must be converted to
149: * be displayed. It is not necessary to specify a Converter instance,
150: * however, since standard JSF conversion deals with this case. A
151: * Validator has been set to verify that any value entered by the
152: * user is within a certain range. The HTML elements are rendered as
153: * in example 1.</p>
154: *
155: * <pre>
156: * <ui:textField id="test2" label="Enter a number:"
157: * text="#{FieldTest.number}"
158: * validator="#{FieldTest.checkNumberRange}"/>
159: * </pre>
160: * <p>Auto-generated component class.
161: * Do <strong>NOT</strong> modify; all changes
162: * <strong>will</strong> be lost!</p>
163: */
164:
165: public abstract class TextFieldBase extends
166: com.sun.rave.web.ui.component.Field {
167:
168: /**
169: * <p>Construct a new <code>TextFieldBase</code>.</p>
170: */
171: public TextFieldBase() {
172: super ();
173: setRendererType("com.sun.rave.web.ui.TextField");
174: }
175:
176: /**
177: * <p>Return the identifier of the component family to which this
178: * component belongs. This identifier, in conjunction with the value
179: * of the <code>rendererType</code> property, may be used to select
180: * the appropriate {@link Renderer} for this component instance.</p>
181: */
182: public String getFamily() {
183: return "com.sun.rave.web.ui.TextField";
184: }
185:
186: /**
187: * <p>Restore the state of this component.</p>
188: */
189: public void restoreState(FacesContext _context, Object _state) {
190: Object _values[] = (Object[]) _state;
191: super .restoreState(_context, _values[0]);
192: }
193:
194: /**
195: * <p>Save the state of this component.</p>
196: */
197: public Object saveState(FacesContext _context) {
198: Object _values[] = new Object[1];
199: _values[0] = super.saveState(_context);
200: return _values;
201: }
202:
203: }
|