<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- saved from url=(0014)about:internet -->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.5.0_19) on Sun Mar 20 20:56:05 PKT 2011 -->
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>
Form (Click Framework API - v2.3.0)
</TITLE>

<META NAME="keywords" CONTENT="org.apache.click.control.Form class">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    parent.document.title="Form (Click Framework API - v2.3.0)";
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white">


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../org/apache/click/control/FileField.html" title="class in org.apache.click.control"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../org/apache/click/control/HiddenField.html" title="class in org.apache.click.control"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?org/apache/click/control/Form.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Form.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
org.apache.click.control</FONT>
<BR>
Class Form</H2>
<PRE>
<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">java.lang.Object</A>
  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../org/apache/click/control/AbstractControl.html" title="class in org.apache.click.control">org.apache.click.control.AbstractControl</A>
      <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">org.apache.click.control.AbstractContainer</A>
          <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>org.apache.click.control.Form</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html" title="class or interface in java.io">Serializable</A>, <A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>, <A HREF="../../../../org/apache/click/control/Container.html" title="interface in org.apache.click.control">Container</A>, <A HREF="../../../../org/apache/click/Stateful.html" title="interface in org.apache.click">Stateful</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>Form</B><DT>extends <A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A><DT>implements <A HREF="../../../../org/apache/click/Stateful.html" title="interface in org.apache.click">Stateful</A></DL>
</PRE>

<P>
Provides a Form control: &nbsp; &lt;form method='post'&gt;.

 <table class='htmlHeader' cellspacing='12'>
 <tr>
 <td>

 <table class='fields'>
 <tr>
 <td align='left'><label>Username</label><span class="red">*</span></td>
 <td align='left'><input type='text' name='username' value='' size='20' maxlength='20' /></td>
 </tr>
 <tr>
 <td align='left'><label>Password</label><span class="red">*</span></td>
 <td align='left'><input type='password' name='password' value='' size='20' maxlength='20' /></td>
 </tr>
 </table>
 <table class="buttons">
 <tr><td>
 <input type='submit' name='ok' value='  OK  '/>&nbsp;<input type='submit' name='cancel' value=' Cancel '/>
 </td></tr>
 </table>

 </td>
 </tr>
 </table>

 When a Form is processed it will process its <A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control"><CODE>Field</CODE></A> controls
 in the order they were added to the form, and then it will process the
 <A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control"><CODE>Button</CODE></A> controls in the added order. Once all the Fields have been
 processed the form will invoke its action listener if defined.

 <h3>Form Example</h3>

 The example below illustrates a Form being used in a login Page.

 <pre class="prettyprint">
 public class Login extends Page {

     public Form form = new Form();

     public Login() {
         form.add(new TextField("username", true));
         form.add(new PasswordField("password", true));
         form.add(new Submit("ok", "  OK  ", this, "onOkClick"));
         form.add(new Submit("cancel", this, "onCancelClick"));
     }

     public boolean onOkClick() {
         if (form.isValid()) {
             User user = new User();
             form.copyTo(user);

             if (getUserService().isAuthenticatedUser(user)) {
                 getContext().setSessionAttribute("user", user);
                 setRedirect(HomePage.class);
             } else {
                 form.setError(getMessage("authentication-error"));
             }
         }
         return true;
     }

     public boolean onCancelClick() {
         setRedirect(WelcomePage.class);
         return false;
     }
 } </pre>

 The forms corresponding template code is below. Note the form automatically
 renders itself when Velocity invokes its <A HREF="../../../../org/apache/click/control/AbstractContainer.html#toString()"><CODE>AbstractContainer.toString()</CODE></A> method.

 <pre class="codeHtml">
 <span class="blue">$form</span> </pre>

 If a Form has been posted and processed, if it has an <A HREF="../../../../org/apache/click/control/Form.html#error"><CODE>error</CODE></A> defined or
 any of its Fields have validation errors they will be automatically
 rendered, and the <A HREF="../../../../org/apache/click/control/Form.html#isValid()"><CODE>isValid()</CODE></A> method will return false.

 <a name="data-binding"></a>
 <h3>Data Binding</h3>

 To bind value objects to a forms fields use the copy methods:
 <ul>
 <li>value object &nbsp; -> &nbsp; form fields  &nbsp; &nbsp; &nbsp;
 <A HREF="../../../../org/apache/click/control/Form.html#copyFrom(java.lang.Object)"><CODE>copyFrom(Object)</CODE></A></li>
 <li>form fields &nbsp; -> &nbsp; value object  &nbsp; &nbsp; &nbsp;
 <A HREF="../../../../org/apache/click/control/Form.html#copyTo(java.lang.Object)"><CODE>copyTo(Object)</CODE></A></li>
 </ul>
 To debug the data binding being performed, use the Click application mode to
 "<tt>debug</tt>" or use the debug copy methods.
 <p/>
 Binding of nested data objects is supported using the
 <a target="blank" href="http://www.ognl.org">OGNL</a> library. To use
 nested objects in your form, simply specify the object path as the Field
 name. Note in the object path you exclude the root object, so the path
 <tt>customer.address.state</tt> is specified as <tt>address.state</tt>.
 <p/>
 For example:

 <pre class="prettyprint">
 // The customer.address.state field
 TextField stateField = new TextField("address.state");
 form.add(stateField);
 ..

 // Loads the customer address state into the form stateField
 Customer customer = getCustomer();
 form.copyFrom(customer);
 ..

 // Copies form stateField value into the customer address state
 Customer customer = new Customer();
 form.copyTo(customer); </pre>

 When populating an object from a form post Click will automatically create
 any null nested objects so their properties can be set. To do this Click
 uses the no-args constructor of the nested objects class.
 <p/>
 <A HREF="../../../../org/apache/click/control/Form.html#copyTo(java.lang.Object)"><CODE>copyTo(Object)</CODE></A> and <A HREF="../../../../org/apache/click/control/Form.html#copyFrom(java.lang.Object)"><CODE>copyFrom(Object)</CODE></A> also supports
 <tt>java.util.Map</tt> as an argument. Examples of using
 <tt>java.util.Map</tt> are shown in the respective method descriptions.

 <a name="form-validation"></a>
 <h3>Form Validation</h3>

 The Form control supports automatic field validation. By default when a POST
 request is made the form will validate the field values. To disable
 automatic validation set <A HREF="../../../../org/apache/click/control/Form.html#setValidate(boolean)"><CODE>setValidate(boolean)</CODE></A> to false.
 <p/>
 Form also provides a <A HREF="../../../../org/apache/click/control/Form.html#validate()"><CODE>validate()</CODE></A> method where subclasses can provide
 custom cross-field validation.
 <p/>
 <b>File Upload Validation</b>
 <p/>
 The Form's <A HREF="../../../../org/apache/click/control/Form.html#validateFileUpload()"><CODE>validateFileUpload()</CODE></A> provides validation for multipart
 requests (multipart requests are used for uploading files from the browser).
 The <A HREF="../../../../org/apache/click/control/Form.html#validateFileUpload()"><CODE>validateFileUpload()</CODE></A> method checks that files being uploaded do not exceed the
 <A HREF="../../../../org/apache/click/service/CommonsFileUploadService.html#sizeMax"><CODE>maximum request size</CODE></A>
 or the <A HREF="../../../../org/apache/click/service/CommonsFileUploadService.html#fileSizeMax"><CODE>maximum file size</CODE></A>.
 <p/>
 <b>Note:</b> if the <tt>maximum request size</tt> or <tt>maximum file size</tt>
 is exceeded, the request is deemed invalid (<A HREF="../../../../org/apache/click/control/Form.html#hasPostError()"><CODE>hasPostError</CODE></A>
 will return true), and no further processing is performed on the form or fields.
 Instead the form will display the appropriate error message for the invalid request.
 See <A HREF="../../../../org/apache/click/control/Form.html#validateFileUpload()"><CODE>validateFileUpload()</CODE></A> for details of the error message properties.
 <p/>
 <b>JavaScript Validation</b>
 <p/>
 The Form control also supports client side JavaScript validation. By default
 JavaScript validation is not enabled. To enable JavaScript validation set
 <A HREF="../../../../org/apache/click/control/Form.html#setJavaScriptValidation(boolean)"><CODE>setJavaScriptValidation(boolean)</CODE></A> to true. For example:

 <pre class="prettyprint">
 Form form = new Form("form");
 form.setJavaScriptValidation(true);

 // Add form fields
 ..

 form.add(new Submit("ok", " OK ", this, "onOkClicked");

 Submit cancel = new Submit("cancel", "Cancel", this, "onCancelClicked");
 cancel.setCancelJavaScriptValidation(true);

 addControl(form); </pre>

 Please note in that is this example the cancel submit button has
 <A HREF="../../../../org/apache/click/control/Submit.html#setCancelJavaScriptValidation(boolean)"><CODE>Submit.setCancelJavaScriptValidation(boolean)</CODE></A> set to true. This
 prevents JavaScript form validation being performed when the cancel button is
 clicked.

 <a name="resources"></a>
 <h3>CSS and JavaScript resources</h3>

 The Form control makes use of the following resources (which Click automatically
 deploys to the application directory, <tt>/click</tt>):

 <ul>
 <li><tt>click/control.css</tt></li>
 <li><tt>click/control.js</tt></li>
 </ul>

 To import these files and any form control imports simply reference
 the variables <span class="blue">$headElements</span> and
 <span class="blue">$jsElements</span> in the page template. For example:

 <pre class="codeHtml">
 &lt;html&gt;
 &lt;head&gt;
 <span class="blue">$headElements</span>
 &lt;/head&gt;
 &lt;body&gt;

 <span class="red">$form</span>

 <span class="blue">$jsElements</span>
 &lt;/body&gt;
 &lt;/html&gt; </pre>

 <a name="form-layout"></a>
 <h3>Form Layout</h3>
 The Form control supports rendering using automatic and manual layout
 techniques.

 <a name="auto-layout"></a>
 <h4>Auto Layout</h4>

 If you include a form variable in your template the form will be
 automatically laid out and rendered. Auto layout, form and field rendering
 options include:

 <table style="margin-left: 1em;" cellpadding="3">
 <tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#buttonAlign"><CODE>buttonAlign</CODE></A></td> <td>button alignment: &nbsp; <tt>["left", "center", "right"]</tt></td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#buttonStyle"><CODE>buttonStyle</CODE></A></td> <td>button &lt;td&gt; "style" attribute value</td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#columns"><CODE>columns</CODE></A></td> <td>number of form table columns, the default value number is 1</td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#errorsAlign"><CODE>errorsAlign</CODE></A></td> <td>validation error messages alignment: &nbsp; <tt>["left", "center", "right"]</tt></td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#errorsPosition"><CODE>errorsPosition</CODE></A></td> <td>validation error messages position: &nbsp; <tt>["top", "middle", "bottom"]</tt></td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#errorsStyle"><CODE>errorsStyle</CODE></A></td> <td>errors &lt;td&gt; "style" attribute value</td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#fieldStyle"><CODE>fieldStyle</CODE></A></td> <td>field &lt;td&gt; "style" attribute value</td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#labelAlign"><CODE>labelAlign</CODE></A></td> <td>field label alignment: &nbsp; <tt>["left", "center", "right"]</tt></td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#labelsPosition"><CODE>labelsPosition</CODE></A></td> <td>label position relative to field: &nbsp; <tt>["left", "top"]</tt></td>
 </tr><tr>
 <td><A HREF="../../../../org/apache/click/control/Form.html#labelStyle"><CODE>labelStyle</CODE></A></td> <td>label &lt;td&gt; "style" attribute value</td>
 </tr><tr>
 <td>click/control.css</td> <td>control CSS styles, automatically deployed to the <tt>click</tt> web directory</td>
 </tr><tr>
 <td>/click-control.properties</td> <td>form and field messages and HTML, located under classpath</td>
 </tr>
 </table>

 <a name="manual-layout"></a>
 <h4>Manual Layout</h4>

 You can also manually layout the Form in the page template specifying
 the fields using the named field notation:

 <pre class="codeHtml">
 $form.<A HREF="../../../../org/apache/click/control/Form.html#getFields()"><CODE>fields</CODE></A>.usernameField </pre>

 Whenever including your own Form markup in a page template or Velocity macro
 always specify:
 <ul style="margin-top: 0.5em;">
  <li><span class="maroon">method</span>
      - the form submission method <tt>["post" | "get"]</tt></li>
  <li><span class="maroon">name</span>
      - the name of your form, important when using JavaScript</li>
  <li><span class="maroon">action</span>
      - directs the Page where the form should be submitted to</li>
  <li><span class="maroon">form_name</span>
      - include a hidden field which specifies the <A HREF="../../../../org/apache/click/control/AbstractControl.html#name"><CODE>AbstractControl.name</CODE></A> of the Form </li>
 </ul>
 The hidden field is used by Click to determine which form was posted on
 a page which may contain multiple forms.
 <p/>
 Alternatively you can use the Form <A HREF="../../../../org/apache/click/control/Form.html#startTag()"><CODE>startTag()</CODE></A> and <A HREF="../../../../org/apache/click/control/Form.html#endTag()"><CODE>endTag()</CODE></A>
 methods to render this information.
 <p/>
 An example of a manually laid out Login form is provided below:

 <pre class="codeHtml">
 <span class="blue">$form.startTag()</span>

   &lt;table style="margin: 1em;"&gt;

     <span class="red">#if</span> (<span class="blue">$form.error</span>)
     &lt;tr&gt;
       &lt;td colspan="2" style="color: red;"&gt; <span class="blue">$form.error</span> &lt;/td&gt;
     &lt;/tr&gt;
     <span class="red">#end</span>
     <span class="red">#if</span> (<span class="blue">$form.fields.usernameField.error</span>)
     &lt;tr&gt;
       &lt;td colspan="2" style="color: red;"&gt; <span class="blue">$form.fields.usernameField.error</span> &lt;/td&gt;
     &lt;/tr&gt;
     <span class="red">#end</span>
     <span class="red">#if</span> (<span class="blue">$form.fields.passwordField.error</span>)
     &lt;tr&gt;
       &lt;td colspan="2" style="color: red;"&gt; <span class="blue">$form.fields.passwordField.error</span> &lt;/td&gt;
     &lt;/tr&gt;
     <span class="red">#end</span>

     &lt;tr&gt;
       &lt;td&gt; Username: &lt;/td&gt;
       &lt;td&gt; <span class="blue">$form.fields.usernameField</span> &lt;/td&gt;
     &lt;/tr&gt;
     &lt;tr&gt;
       &lt;td&gt; Password: &lt;/td&gt;
       &lt;td&gt; <span class="blue">$form.fields.passwordField</span> &lt;/td&gt;
     &lt;/tr&gt;

     &lt;tr&gt;
       &lt;td&gt;
         <span class="blue">$form.fields.okSubmit</span>
         <span class="blue">$form.fields.cancelSubmit</span>
       &lt;/td&gt;
     &lt;/tr&gt;

   &lt;/table&gt;

 <span class="blue">$form.endTag()</span> </pre>

 As you can see in this example most of the code and markup is generic and
 could be reused. This is where Velocity Macros come in.

 <a name="velocity-macros"></a>
 <h4>Velocity Macros</h4>

 Velocity Macros
 (<a target="topic" href="../../../../../velocity/user-guide.html#Velocimacros">velocimacros</a>)
 are a great way to encapsulate customized forms.
 <p/>
 To create a generic form layout you can use the Form <A HREF="../../../../org/apache/click/control/Form.html#getFieldList()"><CODE>getFieldList()</CODE></A> and
 <A HREF="../../../../org/apache/click/control/Form.html#getButtonList()"><CODE>getButtonList()</CODE></A> properties within a Velocity macro. If you want to
 access <em>all</em> Form Controls from within a Velocity template or macro use
 <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControls()"><CODE>AbstractContainer.getControls()</CODE></A>.
 <p/>
 The example below provides a generic <span class="green">writeForm()</span>
 macro which you could use through out an application. This Velocity macro code
 would be contained in a macro file, e.g. <tt>macro.vm</tt>.

 <pre class="codeHtml"> <span class="red">#*</span> Custom Form Macro Code <span class="red">*#</span>
 <span class="red">#macro</span>( <span class="green">writeForm</span>[<span class="blue">$form</span>] )

 <span class="blue">$form.startTag()</span>

 &lt;table width="100%"&gt;

 <span class="red">#if</span> (<span class="blue">$form.error</span>)
   &lt;tr&gt;
     &lt;td colspan="2" style="color: red;"&gt; <span class="blue">$form.error</span> &lt;/td&gt;
   &lt;/tr&gt;
 <span class="red">#end</span>

 <span class="red">#foreach</span> (<span class="blue">$field</span> <span class="red">in</span> <span class="blue">$form.fieldList</span>)
   <span class="red">#if</span> (!<span class="blue">$field.hidden</span>)
     <span class="red">#if</span> (!<span class="blue">$field.valid</span>)
     &lt;tr&gt;
       &lt;td colspan="2"&gt; <span class="blue">$field.error</span> &lt;/td&gt;
     &lt;/tr&gt;
     <span class="red">#end</span>

   &lt;tr&gt;
     &lt;td&gt; <span class="blue">$field.label</span>: &lt;/td&gt;&lt;td&gt; <span class="blue">$field</span> &lt;/td&gt;
   &lt;/tr&gt;
   <span class="red">#end</span>
 <span class="red">#end</span>

  &lt;tr&gt;
    &lt;td colspan="2"&gt;
    <span class="red">#foreach</span> (<span class="blue">$button</span> <span class="red">in </span><span class="blue">$form.buttonList</span>)
      <span class="blue">$button</span> &amp;nbsp;
    <span class="red">#end</span>
    &lt;/td&gt;
  &lt;/tr&gt;

 &lt;/table&gt;

 <span class="blue">$form.endTag()</span>

 <span class="red">#end</span> </pre>

 You would then call this macro in your Page template passing it your
 <span class="blue">form</span> object:

 <pre class="codeHtml"> <span class="red">#</span><span class="green">writeForm</span>(<span class="blue">$form</span>) </pre>

 At render time Velocity will execute the macro using the given form and render
 the results to the response output stream.

 <h4>Configuring Macros</h4>

 To configure your application to use your macros you can:
 <ul>
  <li>
   Put your macros if a file called <span class="st"><tt>macro.vm</tt></span>
   in your applications root directory.
  </li>
  <li>
   Put your macros in the auto deployed
   <span class="st"><tt>click/VM_global_macro.vm</tt></span> file.
  </li>
  <li>
   Create a custom named macro file and reference it in a
   <span class="st"><tt>WEB-INF/velocity.properties</tt></span>
   file under the property named
   <tt>velocimacro.library</tt>.
  </li>
 </ul>

 <a name="post-redirect"></a>
 <h3>Preventing Accidental Form Posts</h3>

 Users may accidentally make multiple form submissions by refreshing a page
 or by pressing the back button.
 <p/>
 To prevent multiple form posts from page refreshes use the Post
 Redirect pattern. With this pattern once the user has posted a form you
 redirect to another page. If the user then presses the refresh button, they
 will making a GET request on the current page. Please see the
 <a target="blank" href="http://www.theserverside.com/articles/content/RedirectAfterPost/article.html">Redirect After Post</a>
 article for more information on this topic.
 <p/>
 To prevent multiple form posts from use of the browser back button use one
 of the Form <A HREF="../../../../org/apache/click/control/Form.html#onSubmitCheck(org.apache.click.Page, java.lang.String)"><CODE>onSubmitCheck(org.apache.click.Page, String)</CODE></A> methods. For example:

 <pre class="prettyprint">
 public class Purchase extends Page {
     ..

     public boolean onSecurityCheck() {
         return form.onSubmitCheck(this, "/invalid-submit.html");
     }
 } </pre>

 The form submit check methods store a special token in the users session
 and in a hidden field in the form to ensure a form post isn't replayed.

 <a name="dynamic-forms"></a>
 <h3>Dynamic Forms and <em>not</em> validating a request</h3>

 A common use case for web applications is to create Form fields dynamically
 based upon user selection. For example if a checkbox is ticked another Field
 is added to the Form. A simple way to achieve this is using JavaScript
 to submit the Form when the Field is changed or clicked.
 <p/>
 When submitting a Form using JavaScript, it is often desirable to <em>not</em>
 validate the fields since the user is still filling out the form.
 To cater for this use case, Form provides the <A HREF="../../../../org/apache/click/control/Form.html#setValidate(boolean)"><CODE>setValidate(boolean)</CODE></A>
 to switch off form and field validation. For example:

 <pre class="prettyprint">
 public void onInit() {
     checkbox.setAttribute("onclick", "form.submit()");

     // Since onInit occurs before the onProcess event,
     // we have to explicitly bind the submit button in the onInit event if we
     // want to check if it was clicked.
     // If the submit button wasn't clicked it means the Form was submitted
     // using JavaScript and we don't want to validate yet
     ClickUtils.bind(submit);

     // If submit was not clicked, don't validate
     if(form.isFormSubmission() && !submit.isClicked()) {
         form.setValidate(false);
     }
 } </pre>

 <p>&nbsp;<p/>
 See also the W3C HTML reference:
 <a class="external" target="_blank" title="W3C HTML 4.01 Specification"
    href="http://www.w3.org/TR/html401/interact/forms.html#h-17.3">FORM</a>
<P>

<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control"><CODE>Field</CODE></A>, 
<A HREF="../../../../org/apache/click/control/Submit.html" title="class in org.apache.click.control"><CODE>Submit</CODE></A>, 
<A HREF="../../../../serialized-form.html#org.apache.click.control.Form">Serialized Form</A></DL>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#actionURL">actionURL</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form action URL.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#ALIGN_CENTER">ALIGN_CENTER</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The align center, form layout constant: &nbsp; <tt>"center"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#ALIGN_LEFT">ALIGN_LEFT</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The align left, form layout constant: &nbsp; <tt>"left"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#ALIGN_RIGHT">ALIGN_RIGHT</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The align right, form layout constant: &nbsp; <tt>"right"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#buttonAlign">buttonAlign</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The button align, default value is "<tt>left</tt>".</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control">Button</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#buttonList">buttonList</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The ordered list of button values.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#buttonStyle">buttonStyle</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The button &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#columns">columns</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The number of form layout table columns, default value: <tt>1</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#defaultFieldSize">defaultFieldSize</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The default field size, default value: <tt>0</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#disabled">disabled</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form disabled value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#enctype">enctype</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form "enctype" attribute.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#error">error</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form level error message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#errorsAlign">errorsAlign</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The errors block align, default value is <tt>"left"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#errorsPosition">errorsPosition</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form errors position <tt>["top", "middle", "bottom"]</tt> default
 value: &nbsp; <tt>"top"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#errorsStyle">errorsStyle</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The error &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#fieldList">fieldList</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The ordered list of fields, excluding buttons.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#fieldStyle">fieldStyle</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The field &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html" title="class or interface in java.lang">Integer</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#fieldWidths">fieldWidths</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The map of field width values.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#FOCUS_JAVASCRIPT">FOCUS_JAVASCRIPT</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Form set field focus JavaScript.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#FORM_NAME">FORM_NAME</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form name parameter for multiple forms: &nbsp; <tt>"form_name"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Boolean.html" title="class or interface in java.lang">Boolean</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#formSubmission">formSubmission</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Flag indicating whether this form was submitted.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#javaScriptValidation">javaScriptValidation</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The JavaScript client side form fields validation flag.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#labelAlign">labelAlign</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The label align, default value is <tt>"left"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#labelsPosition">labelsPosition</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form labels position <tt>["left", "top"]</tt> default value: &nbsp;
 <tt>"left"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#labelStyle">labelStyle</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The label &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#method">method</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form method <tt>["post, "get"]</tt>, default value: &nbsp;
 <tt>post</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#MULTIPART_FORM_DATA">MULTIPART_FORM_DATA</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The HTTP content type header for multipart forms.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#POSITION_BOTTOM">POSITION_BOTTOM</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The position bottom, errors on bottom form layout constant: &nbsp;
 <tt>"top"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#POSITION_LEFT">POSITION_LEFT</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The position left, labels of left form layout constant: &nbsp;
 <tt>"left"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#POSITION_MIDDLE">POSITION_MIDDLE</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The position middle, errors in middle form layout constant: &nbsp;
 <tt>"middle"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#POSITION_TOP">POSITION_TOP</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The position top, errors and labels form layout constant: &nbsp;
 <tt>"top"</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#readonly">readonly</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form is readonly flag.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#SUBMIT_CHECK">SUBMIT_CHECK</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The submit check reserved request parameter prefix: &nbsp;
 <tt>SUBMIT_CHECK_</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#validate">validate</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The form validate fields when processing flag.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_org.apache.click.control.AbstractContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class org.apache.click.control.<A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#controlMap">controlMap</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#controls">controls</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_org.apache.click.control.AbstractControl"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class org.apache.click.control.<A HREF="../../../../org/apache/click/control/AbstractControl.html" title="class in org.apache.click.control">AbstractControl</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html#actionListener">actionListener</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#attributes">attributes</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#behaviors">behaviors</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#headElements">headElements</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#listener">listener</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#listenerMethod">listenerMethod</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#messages">messages</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#name">name</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#parent">parent</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#styles">styles</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_org.apache.click.Control"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from interface org.apache.click.<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../org/apache/click/Control.html#CONTROL_MESSAGES">CONTROL_MESSAGES</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#Form()">Form</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a form with no name.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#Form(java.lang.String)">Form</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Create a form with the given name.</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#add(org.apache.click.Control)">add</A></B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;control)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add a Control to the form and return the added instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#add(org.apache.click.Control, int)">add</A></B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;control,
    int&nbsp;width)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add the control to the form and specify the control's width in columns.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#add(org.apache.click.control.Field)">add</A></B>(<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&nbsp;field)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add the field to the form, and set the fields form property.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#add(org.apache.click.control.Field, int)">add</A></B>(<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&nbsp;field,
    int&nbsp;width)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add the field to the form and specify the field's width in columns.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#clearErrors()">clearErrors</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clear any form or field errors by setting them to null.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#clearValues()">clearValues</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clear all the form field values setting them to null.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#copyFrom(java.lang.Object)">copyFrom</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copy the given object's attributes into the Form's field values.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#copyFrom(java.lang.Object, boolean)">copyFrom</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
         boolean&nbsp;debug)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copy the given object's attributes into the Form's field values.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#copyTo(java.lang.Object)">copyTo</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copy the Form's field values into the given object's attributes.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#copyTo(java.lang.Object, boolean)">copyTo</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
       boolean&nbsp;debug)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copy the Form's field values into the given object's attributes.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#endTag()">endTag</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the rendered form end tag and JavaScript for field focus
 and validation.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getActionURL()">getActionURL</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form "action" attribute URL value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getButtonAlign()">getButtonAlign</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the buttons &lt;td&gt; HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control">Button</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getButtonList()">getButtonList</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the ordered list of <A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control"><CODE>Button</CODE></A>s.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getButtonStyle()">getButtonStyle</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the button &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getColumns()">getColumns</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the number of form layout table columns.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getControlSizeEst()">getControlSizeEst</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the estimated rendered control size in characters.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getDefaultFieldSize()">getDefaultFieldSize</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form default field size.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getEnctype()">getEnctype</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form "enctype" attribute value, or null if not defined.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getError()">getError</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form level error message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getErrorFields()">getErrorFields</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return a list of form fields which are not valid, not hidden and not
 disabled.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getErrorsAlign()">getErrorsAlign</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the errors block HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getErrorsPosition()">getErrorsPosition</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form errors position <tt>["top", "middle", "bottom"]</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getErrorsStyle()">getErrorsStyle</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the error &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getField(java.lang.String)">getField</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the named field if contained in the form or null if not found.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getFieldList()">getFieldList</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the ordered list of form fields, excluding buttons.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>,<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getFields()">getFields</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the Map of form fields (including buttons), keyed
 on field name.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getFieldStyle()">getFieldStyle</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the field &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getFieldValue(java.lang.String)">getFieldValue</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the field value for the named field, or null if the field is not
 found.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html" title="class or interface in java.lang">Integer</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getFieldWidths()">getFieldWidths</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the map of field width values, keyed on field name.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getFormSizeEst(java.util.List)">getFormSizeEst</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the estimated rendered form size in characters.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/element/Element.html" title="class in org.apache.click.element">Element</A>&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getHeadElements()">getHeadElements</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the Form HEAD elements to be included in the page.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getJavaScriptValidation()">getJavaScriptValidation</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>use <A HREF="../../../../org/apache/click/control/Form.html#isJavaScriptValidation()"><CODE>isJavaScriptValidation()</CODE></A> instead</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getLabelAlign()">getLabelAlign</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the field label HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getLabelsPosition()">getLabelsPosition</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form labels position <tt>["left", "top"]</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getLabelStyle()">getLabelStyle</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the label &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getMethod()">getMethod</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form method <tt>["post" | "get"]</tt>, default value is
 <tt>post</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getState()">getState</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form state.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getTag()">getTag</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form's html tag: <tt>form</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#getValidate()">getValidate</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the Form fields should validate themselves when being
 processed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#hasPostError()">hasPostError</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns true if a POST error occurred, false otherwise.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#insert(org.apache.click.Control, int)">insert</A></B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;control,
       int&nbsp;index)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add the control to the form at the specified index, and return the
 added instance.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#isDisabled()">isDisabled</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the form is a disabled.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#isFormSubmission()">isFormSubmission</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the page request is a submission from this form.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#isJavaScriptValidation()">isJavaScriptValidation</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if JavaScript client side form validation is enabled.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#isReadonly()">isReadonly</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the form is a readonly.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#isValid()">isValid</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return true if the fields are valid and there is no form level error,
 otherwise return false.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#onDestroy()">onDestroy</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Destroy the controls contained in the Form and clear any form
 error message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#onProcess()">onProcess</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Process the Form and its child controls only if the Form was submitted
 by the user.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#onSubmitCheck(org.apache.click.Page, java.lang.Class)">onSubmitCheck</A></B>(<A HREF="../../../../org/apache/click/Page.html" title="class in org.apache.click">Page</A>&nbsp;page,
              <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&lt;? extends <A HREF="../../../../org/apache/click/Page.html" title="class in org.apache.click">Page</A>&gt;&nbsp;pageClass)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform a form submission check ensuring the user has not replayed the
 form submission by using the browser back button.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#onSubmitCheck(org.apache.click.Page, java.lang.Object, java.lang.String)">onSubmitCheck</A></B>(<A HREF="../../../../org/apache/click/Page.html" title="class in org.apache.click">Page</A>&nbsp;page,
              <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;submitListener,
              <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;submitListenerMethod)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform a form submission check ensuring the user has not replayed the
 form submission by using the browser back button.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#onSubmitCheck(org.apache.click.Page, java.lang.String)">onSubmitCheck</A></B>(<A HREF="../../../../org/apache/click/Page.html" title="class in org.apache.click">Page</A>&nbsp;page,
              <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;redirectPath)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform a form submission check ensuring the user has not replayed the
 form submission by using the browser's back or refresh buttons or by
 clicking the Form submit button twice, in quick succession.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#performSubmitCheck()">performSubmitCheck</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Perform a back button submit check, returning true if the request is
 valid or false otherwise.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#remove(org.apache.click.Control)">remove</A></B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;control)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the given control from the container, returning true if the
 control was found in the container and removed, or false if the control
 was not found.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#removeField(java.lang.String)">removeField</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the named field from the form, returning true if removed
 or false if not found.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#removeFields(java.util.List)">removeFields</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&gt;&nbsp;fieldNames)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the list of named fields from the form.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#removeState(org.apache.click.Context)">removeState</A></B>(<A HREF="../../../../org/apache/click/Context.html" title="class in org.apache.click">Context</A>&nbsp;context)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Remove the Form state from the session for the given request context.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#render(org.apache.click.util.HtmlStringBuffer)">render</A></B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render the HTML representation of the Form.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#renderButtons(org.apache.click.util.HtmlStringBuffer)">renderButtons</A></B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render the given list of Buttons to the string buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#renderControls(org.apache.click.util.HtmlStringBuffer, org.apache.click.control.Container, java.util.List, java.util.Map, int)">renderControls</A></B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
               <A HREF="../../../../org/apache/click/control/Container.html" title="interface in org.apache.click.control">Container</A>&nbsp;container,
               <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&gt;&nbsp;controls,
               <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html" title="class or interface in java.lang">Integer</A>&gt;&nbsp;fieldWidths,
               int&nbsp;columns)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render the specified controls of the container to the string buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#renderErrors(org.apache.click.util.HtmlStringBuffer, boolean)">renderErrors</A></B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
             boolean&nbsp;processed)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render the form errors to the given buffer is form processed.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#renderFields(org.apache.click.util.HtmlStringBuffer)">renderFields</A></B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render the non hidden Form Fields to the string buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#renderFocusJavaScript(org.apache.click.util.HtmlStringBuffer, java.util.List)">renderFocusJavaScript</A></B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
                      <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render the Form field focus JavaScript to the string buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#renderHeader(org.apache.click.util.HtmlStringBuffer, java.util.List)">renderHeader</A></B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
             <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render the given form start tag and the form hidden fields to the given
 buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#renderTagEnd(java.util.List, org.apache.click.util.HtmlStringBuffer)">renderTagEnd</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields,
             <A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close the form tag and render any additional content after the Form.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#renderValidationJavaScript(org.apache.click.util.HtmlStringBuffer, java.util.List)">renderValidationJavaScript</A></B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
                           <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Render the Form validation JavaScript to the string buffer.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#replace(org.apache.click.Control, org.apache.click.Control)">replace</A></B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;currentControl,
        <A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;newControl)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I>this method was used for stateful pages, which have been deprecated</I></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#restoreState(org.apache.click.Context)">restoreState</A></B>(<A HREF="../../../../org/apache/click/Context.html" title="class in org.apache.click">Context</A>&nbsp;context)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Restore the Form state from the session for the given request context.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#saveState(org.apache.click.Context)">saveState</A></B>(<A HREF="../../../../org/apache/click/Context.html" title="class in org.apache.click">Context</A>&nbsp;context)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Save the Form state to the session for the given request context.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setActionURL(java.lang.String)">setActionURL</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form "action" attribute URL value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setButtonAlign(java.lang.String)">setButtonAlign</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;align)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the button &lt;td&gt; HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setButtonStyle(java.lang.String)">setButtonStyle</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the button &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setColumns(int)">setColumns</A></B>(int&nbsp;columns)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the number of form layout table columns.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setDefaultFieldSize(int)">setDefaultFieldSize</A></B>(int&nbsp;size)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the form default field size.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setDisabled(boolean)">setDisabled</A></B>(boolean&nbsp;disabled)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the form disabled flag.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setEnctype(java.lang.String)">setEnctype</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;enctype)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the form "enctype" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setError(java.lang.String)">setError</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;error)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the form level validation error message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setErrorsAlign(java.lang.String)">setErrorsAlign</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;align)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the errors block HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setErrorsPosition(java.lang.String)">setErrorsPosition</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;position)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the form errors position <tt>["top", "middle", "bottom"]</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setErrorsStyle(java.lang.String)">setErrorsStyle</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the errors &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setFieldStyle(java.lang.String)">setFieldStyle</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the field &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setJavaScriptValidation(boolean)">setJavaScriptValidation</A></B>(boolean&nbsp;validate)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the JavaScript client side form validation flag.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setLabelAlign(java.lang.String)">setLabelAlign</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;align)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the field label HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setLabelsPosition(java.lang.String)">setLabelsPosition</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;position)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the form labels position <tt>["left", "top"]</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setLabelStyle(java.lang.String)">setLabelStyle</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the label &lt;td&gt; "style" attribute value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setListener(java.lang.Object, java.lang.String)">setListener</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;listener,
            <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;method)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The callback listener will only be called during processing if the field
 value is valid.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setMethod(java.lang.String)">setMethod</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the form method <tt>["post" | "get"]</tt>.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setName(java.lang.String)">setName</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the name of the form.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setReadonly(boolean)">setReadonly</A></B>(boolean&nbsp;readonly)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the form readonly flag.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setState(java.lang.Object)">setState</A></B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;state)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the Form state.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#setValidate(boolean)">setValidate</A></B>(boolean&nbsp;validate)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the Form field validation flag, telling the Fields to validate
 themselves when their <tt>onProcess()</tt> method is invoked.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#startTag()">startTag</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Return the rendered opening form tag and all the forms hidden fields.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#validate()">validate</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The validate method is invoked by <A HREF="../../../../org/apache/click/control/Form.html#onProcess()"><CODE>onProcess()</CODE></A> to validate
 the request submission.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>protected &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../org/apache/click/control/Form.html#validateFileUpload()">validateFileUpload</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Validate the request for any file upload (multipart) errors.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_org.apache.click.control.AbstractContainer"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class org.apache.click.control.<A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#contains(org.apache.click.Control)">contains</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControl(java.lang.String)">getControl</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControlMap()">getControlMap</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControls()">getControls</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#hasControls()">hasControls</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#onInit()">onInit</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#onRender()">onRender</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#renderChildren(org.apache.click.util.HtmlStringBuffer)">renderChildren</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#renderContent(org.apache.click.util.HtmlStringBuffer)">renderContent</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#renderTagEnd(java.lang.String, org.apache.click.util.HtmlStringBuffer)">renderTagEnd</A>, <A HREF="../../../../org/apache/click/control/AbstractContainer.html#toString()">toString</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_org.apache.click.control.AbstractControl"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class org.apache.click.control.<A HREF="../../../../org/apache/click/control/AbstractControl.html" title="class in org.apache.click.control">AbstractControl</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html#addBehavior(org.apache.click.Behavior)">addBehavior</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#addStyleClass(java.lang.String)">addStyleClass</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#appendAttributes(org.apache.click.util.HtmlStringBuffer)">appendAttributes</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#dispatchActionEvent()">dispatchActionEvent</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getActionListener()">getActionListener</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getAttribute(java.lang.String)">getAttribute</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getAttributes()">getAttributes</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getBehaviors()">getBehaviors</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getContext()">getContext</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getHtmlImports()">getHtmlImports</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getId()">getId</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getMessage(java.lang.String)">getMessage</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getMessage(java.lang.String, java.lang.Object...)">getMessage</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getMessages()">getMessages</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getName()">getName</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getPage()">getPage</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getParent()">getParent</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getStyle(java.lang.String)">getStyle</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#getStyles()">getStyles</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#hasAttribute(java.lang.String)">hasAttribute</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#hasAttributes()">hasAttributes</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#hasBehaviors()">hasBehaviors</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#hasStyles()">hasStyles</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#isAjaxTarget(org.apache.click.Context)">isAjaxTarget</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#onDeploy(javax.servlet.ServletContext)">onDeploy</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#removeBehavior(org.apache.click.Behavior)">removeBehavior</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#removeStyleClass(java.lang.String)">removeStyleClass</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#renderTagBegin(java.lang.String, org.apache.click.util.HtmlStringBuffer)">renderTagBegin</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#setActionListener(org.apache.click.ActionListener)">setActionListener</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#setAttribute(java.lang.String, java.lang.String)">setAttribute</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#setId(java.lang.String)">setId</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#setParent(java.lang.Object)">setParent</A>, <A HREF="../../../../org/apache/click/control/AbstractControl.html#setStyle(java.lang.String, java.lang.String)">setStyle</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#clone()" title="class or interface in java.lang">clone</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang">equals</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#finalize()" title="class or interface in java.lang">finalize</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#getClass()" title="class or interface in java.lang">getClass</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#hashCode()" title="class or interface in java.lang">hashCode</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#notify()" title="class or interface in java.lang">notify</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#notifyAll()" title="class or interface in java.lang">notifyAll</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait()" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait(long)" title="class or interface in java.lang">wait</A>, <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#wait(long, int)" title="class or interface in java.lang">wait</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_org.apache.click.Control"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from interface org.apache.click.<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../../org/apache/click/Control.html#getBehaviors()">getBehaviors</A>, <A HREF="../../../../org/apache/click/Control.html#getContext()">getContext</A>, <A HREF="../../../../org/apache/click/Control.html#getId()">getId</A>, <A HREF="../../../../org/apache/click/Control.html#getMessages()">getMessages</A>, <A HREF="../../../../org/apache/click/Control.html#getName()">getName</A>, <A HREF="../../../../org/apache/click/Control.html#getParent()">getParent</A>, <A HREF="../../../../org/apache/click/Control.html#hasBehaviors()">hasBehaviors</A>, <A HREF="../../../../org/apache/click/Control.html#isAjaxTarget(org.apache.click.Context)">isAjaxTarget</A>, <A HREF="../../../../org/apache/click/Control.html#onDeploy(javax.servlet.ServletContext)">onDeploy</A>, <A HREF="../../../../org/apache/click/Control.html#setParent(java.lang.Object)">setParent</A></CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->

<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="ALIGN_LEFT"><!-- --></A><H3>
ALIGN_LEFT</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>ALIGN_LEFT</B></PRE>
<DL>
<DD>The align left, form layout constant: &nbsp; <tt>"left"</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.ALIGN_LEFT">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="ALIGN_CENTER"><!-- --></A><H3>
ALIGN_CENTER</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>ALIGN_CENTER</B></PRE>
<DL>
<DD>The align center, form layout constant: &nbsp; <tt>"center"</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.ALIGN_CENTER">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="ALIGN_RIGHT"><!-- --></A><H3>
ALIGN_RIGHT</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>ALIGN_RIGHT</B></PRE>
<DL>
<DD>The align right, form layout constant: &nbsp; <tt>"right"</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.ALIGN_RIGHT">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="POSITION_TOP"><!-- --></A><H3>
POSITION_TOP</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>POSITION_TOP</B></PRE>
<DL>
<DD>The position top, errors and labels form layout constant: &nbsp;
 <tt>"top"</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.POSITION_TOP">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="POSITION_MIDDLE"><!-- --></A><H3>
POSITION_MIDDLE</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>POSITION_MIDDLE</B></PRE>
<DL>
<DD>The position middle, errors in middle form layout constant: &nbsp;
 <tt>"middle"</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.POSITION_MIDDLE">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="POSITION_BOTTOM"><!-- --></A><H3>
POSITION_BOTTOM</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>POSITION_BOTTOM</B></PRE>
<DL>
<DD>The position bottom, errors on bottom form layout constant: &nbsp;
 <tt>"top"</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.POSITION_BOTTOM">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="POSITION_LEFT"><!-- --></A><H3>
POSITION_LEFT</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>POSITION_LEFT</B></PRE>
<DL>
<DD>The position left, labels of left form layout constant: &nbsp;
 <tt>"left"</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.POSITION_LEFT">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="FORM_NAME"><!-- --></A><H3>
FORM_NAME</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>FORM_NAME</B></PRE>
<DL>
<DD>The form name parameter for multiple forms: &nbsp; <tt>"form_name"</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.FORM_NAME">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="MULTIPART_FORM_DATA"><!-- --></A><H3>
MULTIPART_FORM_DATA</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>MULTIPART_FORM_DATA</B></PRE>
<DL>
<DD>The HTTP content type header for multipart forms.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.MULTIPART_FORM_DATA">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="SUBMIT_CHECK"><!-- --></A><H3>
SUBMIT_CHECK</H3>
<PRE>
public static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>SUBMIT_CHECK</B></PRE>
<DL>
<DD>The submit check reserved request parameter prefix: &nbsp;
 <tt>SUBMIT_CHECK_</tt>.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.SUBMIT_CHECK">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="FOCUS_JAVASCRIPT"><!-- --></A><H3>
FOCUS_JAVASCRIPT</H3>
<PRE>
protected static final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>FOCUS_JAVASCRIPT</B></PRE>
<DL>
<DD>The Form set field focus JavaScript.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#org.apache.click.control.Form.FOCUS_JAVASCRIPT">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="actionURL"><!-- --></A><H3>
actionURL</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>actionURL</B></PRE>
<DL>
<DD>The form action URL.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="disabled"><!-- --></A><H3>
disabled</H3>
<PRE>
protected boolean <B>disabled</B></PRE>
<DL>
<DD>The form disabled value.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="enctype"><!-- --></A><H3>
enctype</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>enctype</B></PRE>
<DL>
<DD>The form "enctype" attribute.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="error"><!-- --></A><H3>
error</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>error</B></PRE>
<DL>
<DD>The form level error message.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="fieldList"><!-- --></A><H3>
fieldList</H3>
<PRE>
protected final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt; <B>fieldList</B></PRE>
<DL>
<DD>The ordered list of fields, excluding buttons.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="method"><!-- --></A><H3>
method</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>method</B></PRE>
<DL>
<DD>The form method <tt>["post, "get"]</tt>, default value: &nbsp;
 <tt>post</tt>.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="readonly"><!-- --></A><H3>
readonly</H3>
<PRE>
protected boolean <B>readonly</B></PRE>
<DL>
<DD>The form is readonly flag.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="validate"><!-- --></A><H3>
validate</H3>
<PRE>
protected boolean <B>validate</B></PRE>
<DL>
<DD>The form validate fields when processing flag.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="buttonAlign"><!-- --></A><H3>
buttonAlign</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>buttonAlign</B></PRE>
<DL>
<DD>The button align, default value is "<tt>left</tt>".
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="buttonList"><!-- --></A><H3>
buttonList</H3>
<PRE>
protected final <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control">Button</A>&gt; <B>buttonList</B></PRE>
<DL>
<DD>The ordered list of button values.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="buttonStyle"><!-- --></A><H3>
buttonStyle</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>buttonStyle</B></PRE>
<DL>
<DD>The button &lt;td&gt; "style" attribute value.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="columns"><!-- --></A><H3>
columns</H3>
<PRE>
protected int <B>columns</B></PRE>
<DL>
<DD>The number of form layout table columns, default value: <tt>1</tt>.
 <p/>
 This property is used to layout the number of table columns the form
 is rendered with using a flow layout style.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="defaultFieldSize"><!-- --></A><H3>
defaultFieldSize</H3>
<PRE>
protected int <B>defaultFieldSize</B></PRE>
<DL>
<DD>The default field size, default value: <tt>0</tt>.
 <p/>
 If the form default field size is greater than 0, when fields are added
 to the form the field's size will be set to the default value.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="errorsAlign"><!-- --></A><H3>
errorsAlign</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>errorsAlign</B></PRE>
<DL>
<DD>The errors block align, default value is <tt>"left"</tt>.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="errorsPosition"><!-- --></A><H3>
errorsPosition</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>errorsPosition</B></PRE>
<DL>
<DD>The form errors position <tt>["top", "middle", "bottom"]</tt> default
 value: &nbsp; <tt>"top"</tt>.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="errorsStyle"><!-- --></A><H3>
errorsStyle</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>errorsStyle</B></PRE>
<DL>
<DD>The error &lt;td&gt; "style" attribute value.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="fieldStyle"><!-- --></A><H3>
fieldStyle</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>fieldStyle</B></PRE>
<DL>
<DD>The field &lt;td&gt; "style" attribute value.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="fieldWidths"><!-- --></A><H3>
fieldWidths</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html" title="class or interface in java.lang">Integer</A>&gt; <B>fieldWidths</B></PRE>
<DL>
<DD>The map of field width values.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="formSubmission"><!-- --></A><H3>
formSubmission</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Boolean.html" title="class or interface in java.lang">Boolean</A> <B>formSubmission</B></PRE>
<DL>
<DD>Flag indicating whether this form was submitted.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="javaScriptValidation"><!-- --></A><H3>
javaScriptValidation</H3>
<PRE>
protected boolean <B>javaScriptValidation</B></PRE>
<DL>
<DD>The JavaScript client side form fields validation flag. By default
 JavaScript validation is not enabled.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="labelAlign"><!-- --></A><H3>
labelAlign</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>labelAlign</B></PRE>
<DL>
<DD>The label align, default value is <tt>"left"</tt>.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="labelsPosition"><!-- --></A><H3>
labelsPosition</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>labelsPosition</B></PRE>
<DL>
<DD>The form labels position <tt>["left", "top"]</tt> default value: &nbsp;
 <tt>"left"</tt>.
<P>
<DL>
</DL>
</DL>
<HR>

<A NAME="labelStyle"><!-- --></A><H3>
labelStyle</H3>
<PRE>
protected <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>labelStyle</B></PRE>
<DL>
<DD>The label &lt;td&gt; "style" attribute value.
<P>
<DL>
</DL>
</DL>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="Form(java.lang.String)"><!-- --></A><H3>
Form</H3>
<PRE>
public <B>Form</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</PRE>
<DL>
<DD>Create a form with the given name.
<P>
<DL>
<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the form
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the form name is null</DL>
</DL>
<HR>

<A NAME="Form()"><!-- --></A><H3>
Form</H3>
<PRE>
public <B>Form</B>()</PRE>
<DL>
<DD>Create a form with no name.
 <p/>
 <b>Please note</b> the control's name must be defined before it is valid.
<P>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="insert(org.apache.click.Control, int)"><!-- --></A><H3>
insert</H3>
<PRE>
public <A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A> <B>insert</B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;control,
                      int&nbsp;index)</PRE>
<DL>
<DD>Add the control to the form at the specified index, and return the
 added instance.
 <p/>
 <b>Please note</b>: if the form contains a control with the same name as
 the given control, that control will be
 <A HREF="../../../../org/apache/click/control/Form.html#replace(org.apache.click.Control, org.apache.click.Control)"><CODE>replaced</CODE></A>
 by the given control. If a control has no name defined it cannot be replaced.
 <p/>
 Controls can be retrieved from the Map <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControlMap()"><CODE>controlMap</CODE></A>
 where the key is the Control name and value is the Control instance.
 <p/>
 All controls are available on the <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControls()"><CODE>controls</CODE></A> list
 at the index they were inserted. If you are only interested in Fields,
 note that Buttons are available on the <A HREF="../../../../org/apache/click/control/Form.html#getButtonList()"><CODE>buttonList</CODE></A>
 while other fields are available on <A HREF="../../../../org/apache/click/control/Form.html#getFieldList()"><CODE>fieldList</CODE></A>.
 <p/>
 The specified index only applies to <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControls()"><CODE>controls</CODE></A>, not
 <A HREF="../../../../org/apache/click/control/Form.html#getButtonList()"><CODE>buttonList</CODE></A> or <A HREF="../../../../org/apache/click/control/Form.html#getFieldList()"><CODE>fieldList</CODE></A>.
 <p/>
 <b>Please note</b> if the specified control already has a parent assigned,
 it will automatically be removed from that parent and inserted into the
 form.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/control/Container.html#insert(org.apache.click.Control, int)">insert</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/control/Container.html" title="interface in org.apache.click.control">Container</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#insert(org.apache.click.Control, int)">insert</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>control</CODE> - the control to add to the container<DD><CODE>index</CODE> - the index at which the control is to be inserted
<DT><B>Returns:</B><DD>the control that was added to the container
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the control is null or if the control
 and container is the same instance or if the Field name is not defined
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IndexOutOfBoundsException.html" title="class or interface in java.lang">IndexOutOfBoundsException</A></CODE> - if index is out of range
 <tt>(index &lt; 0 || index &gt; getControls().size())</tt><DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Container.html#insert(org.apache.click.Control, int)"><CODE>Container.insert(org.apache.click.Control, int)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="add(org.apache.click.Control)"><!-- --></A><H3>
add</H3>
<PRE>
public <A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A> <B>add</B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;control)</PRE>
<DL>
<DD>Add a Control to the form and return the added instance.
 <p/>
 <b>Please note</b>: if the form contains a control with the same name as
 the given control, that control will be
 <A HREF="../../../../org/apache/click/control/Form.html#replace(org.apache.click.Control, org.apache.click.Control)"><CODE>replaced</CODE></A>
 by the given control. If a control has no name defined it cannot be replaced.
 <p/>
 Controls can be retrieved from the Map <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControlMap()"><CODE>controlMap</CODE></A>
 where the key is the Control name and value is the Control instance.
 <p/>
 All controls are available on the <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControls()"><CODE>controls</CODE></A> list
 in the order they were added. If you are only interested in Fields,
 note that Buttons are available on the <A HREF="../../../../org/apache/click/control/Form.html#getButtonList()"><CODE>buttonList</CODE></A>
 while other fields are available on <A HREF="../../../../org/apache/click/control/Form.html#getFieldList()"><CODE>fieldList</CODE></A>.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/control/Container.html#add(org.apache.click.Control)">add</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/control/Container.html" title="interface in org.apache.click.control">Container</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#add(org.apache.click.Control)">add</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>control</CODE> - the control to add to the container and return
<DT><B>Returns:</B><DD>the control that was added to the container
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the control is null, the Control name
 is not defined or the container already contains a control with the same
 name<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Container.html#add(org.apache.click.Control)"><CODE>Container.add(org.apache.click.Control)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="add(org.apache.click.control.Field)"><!-- --></A><H3>
add</H3>
<PRE>
public <A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A> <B>add</B>(<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&nbsp;field)</PRE>
<DL>
<DD>Add the field to the form, and set the fields form property.
 <p/>
 <b>Please note</b>: if the form contains a control with the same name as
 the given control, that control will be
 <A HREF="../../../../org/apache/click/control/Form.html#replace(org.apache.click.Control, org.apache.click.Control)"><CODE>replaced</CODE></A>
 by the given control. If a control has no name defined it cannot be replaced.
 <p/>
 Fields can be retrieved from the Map <A HREF="../../../../org/apache/click/control/Form.html#getFields()"><CODE>fields</CODE></A> where
 the key is the Field name and value is the Field instance.
 <p/>
 Buttons are available on the <A HREF="../../../../org/apache/click/control/Form.html#getButtonList()"><CODE>buttonList</CODE></A> while
 other fields are available on <A HREF="../../../../org/apache/click/control/Form.html#getFieldList()"><CODE>fieldList</CODE></A>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>field</CODE> - the field to add to the form
<DT><B>Returns:</B><DD>the field added to this form
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the field is null, the field name
 is not defined or the form already contains a control with the same name<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Form.html#add(org.apache.click.Control)"><CODE>add(org.apache.click.Control)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="add(org.apache.click.control.Field, int)"><!-- --></A><H3>
add</H3>
<PRE>
public <A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A> <B>add</B>(<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&nbsp;field,
                 int&nbsp;width)</PRE>
<DL>
<DD>Add the field to the form and specify the field's width in columns.
 <p/>
 <b>Please note</b>: if the form contains a control with the same name as
 the given control, that control will be
 <A HREF="../../../../org/apache/click/control/Form.html#replace(org.apache.click.Control, org.apache.click.Control)"><CODE>replaced</CODE></A>
 by the given control. If a control has no name defined it cannot be replaced.
 <p/>
 Fields can be retrieved from the Map <A HREF="../../../../org/apache/click/control/Form.html#getFields()"><CODE>fields</CODE></A> where
 the key is the Field name and value is the Field instance.
 <p/>
 Fields are available on <A HREF="../../../../org/apache/click/control/Form.html#getFieldList()"><CODE>fieldList</CODE></A>.
 <p/>
 Note Button and HiddenField types are not valid arguments for this method.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>field</CODE> - the field to add to the form<DD><CODE>width</CODE> - the width of the field in table columns
<DT><B>Returns:</B><DD>the field added to this form
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the field is null, field name is
 not defined, field is a Button or HiddenField, the form already contains
 a field with the same name or the width &lt; 1<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Form.html#add(org.apache.click.Control)"><CODE>add(org.apache.click.Control)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="add(org.apache.click.Control, int)"><!-- --></A><H3>
add</H3>
<PRE>
public <A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A> <B>add</B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;control,
                   int&nbsp;width)</PRE>
<DL>
<DD>Add the control to the form and specify the control's width in columns.
 <p/>
 <b>Please note</b>: if the form contains a control with the same name as
 the given control, that control will be
 <A HREF="../../../../org/apache/click/control/Form.html#replace(org.apache.click.Control, org.apache.click.Control)"><CODE>replaced</CODE></A>
 by the given control. If a control has no name defined it cannot be replaced.
 <p/>
 Controls can be retrieved from the Map <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControlMap()"><CODE>controlMap</CODE></A>
 where the key is the Control name and value is the Control instance.
 <p/>
 Controls are available on the <A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControls()"><CODE>controls</CODE></A> list.
 <p/>
 Note Button and HiddenField types are not valid arguments for this method.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>control</CODE> - the control to add to the form<DD><CODE>width</CODE> - the width of the control in table columns
<DT><B>Returns:</B><DD>the control added to this form
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the control is null, control is a
 Button or HiddenField, the form already contains a control with the same
 name or the width &lt; 1<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Form.html#add(org.apache.click.Control)"><CODE>add(org.apache.click.Control)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="replace(org.apache.click.Control, org.apache.click.Control)"><!-- --></A><H3>
replace</H3>
<PRE>
public <A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A> <B>replace</B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;currentControl,
                       <A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;newControl)</PRE>
<DL>
<DD><B>Deprecated.</B>&nbsp;<I>this method was used for stateful pages, which have been deprecated</I>
<P>
<DD>Replace the control in the form at the specified index, and return
 the newly added control.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/control/Container.html#replace(org.apache.click.Control, org.apache.click.Control)">replace</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/control/Container.html" title="interface in org.apache.click.control">Container</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#replace(org.apache.click.Control, org.apache.click.Control)">replace</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>currentControl</CODE> - the control currently contained in the form<DD><CODE>newControl</CODE> - the control to replace the current control contained in
 the form
<DT><B>Returns:</B><DD>the new control that replaced the current control
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the currentControl or newControl is
 null
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalStateException.html" title="class or interface in java.lang">IllegalStateException</A></CODE> - if the currentControl is not contained in
 the form<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Container.html#replace(org.apache.click.Control, org.apache.click.Control)"><CODE>Container.replace(org.apache.click.Control, org.apache.click.Control)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="remove(org.apache.click.Control)"><!-- --></A><H3>
remove</H3>
<PRE>
public boolean <B>remove</B>(<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&nbsp;control)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../../../org/apache/click/control/Container.html#remove(org.apache.click.Control)">Container</A></CODE></B></DD>
<DD>Remove the given control from the container, returning true if the
 control was found in the container and removed, or false if the control
 was not found.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/control/Container.html#remove(org.apache.click.Control)">remove</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/control/Container.html" title="interface in org.apache.click.control">Container</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#remove(org.apache.click.Control)">remove</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>control</CODE> - the control to remove from the container
<DT><B>Returns:</B><DD>true if the control was removed from the container
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the control is null<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Container.html#remove(org.apache.click.Control)"><CODE>Container.remove(org.apache.click.Control)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="removeField(java.lang.String)"><!-- --></A><H3>
removeField</H3>
<PRE>
public boolean <B>removeField</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</PRE>
<DL>
<DD>Remove the named field from the form, returning true if removed
 or false if not found.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the field to remove from the form
<DT><B>Returns:</B><DD>true if the named field was removed or false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="removeFields(java.util.List)"><!-- --></A><H3>
removeFields</H3>
<PRE>
public void <B>removeFields</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&gt;&nbsp;fieldNames)</PRE>
<DL>
<DD>Remove the list of named fields from the form.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>fieldNames</CODE> - the list of field names to remove from the form
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if any of the fields is null</DL>
</DD>
</DL>
<HR>

<A NAME="getTag()"><!-- --></A><H3>
getTag</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getTag</B>()</PRE>
<DL>
<DD>Return the form's html tag: <tt>form</tt>.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html#getTag()">getTag</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html" title="class in org.apache.click.control">AbstractControl</A></CODE></DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>this controls html tag<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/AbstractControl.html#getTag()"><CODE>AbstractControl.getTag()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getActionURL()"><!-- --></A><H3>
getActionURL</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getActionURL</B>()</PRE>
<DL>
<DD>Return the form "action" attribute URL value. If the action URL attribute
 has not been explicitly set the form action attribute will target the
 page containing the form. This is the default behaviour for most scenarios.
 However if you explicitly specify the form "action" URL attribute, this
 value will be used instead.
 <p/>
 Setting the form action attribute is useful for situations where you want
 a form to submit to a different page. This can also be used to have a
 form submit to the J2EE Container for authentication, by setting the
 action URL to "<tt>j_security_check</tt>".
 <p/>
 The action URL will always be encoded by the response to ensure it includes
 the Session ID if required.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the form "action" attribute URL value.</DL>
</DD>
</DL>
<HR>

<A NAME="setActionURL(java.lang.String)"><!-- --></A><H3>
setActionURL</H3>
<PRE>
public void <B>setActionURL</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</PRE>
<DL>
<DD>Return the form "action" attribute URL value. By setting this value you
 will override the default action URL which points to the page containing
 the form.
 <p/>
 Setting the form action attribute is useful for situations where you want
 a form to submit to a different page. This can also be used to have a
 form submit to the J2EE Container for authentication, by setting the
 action URL to "<tt>j_security_check</tt>".
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the form "action" attribute URL value</DL>
</DD>
</DL>
<HR>

<A NAME="getControlSizeEst()"><!-- --></A><H3>
getControlSizeEst</H3>
<PRE>
public int <B>getControlSizeEst</B>()</PRE>
<DL>
<DD><B>Description copied from class: <CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html#getControlSizeEst()">AbstractControl</A></CODE></B></DD>
<DD>Return the estimated rendered control size in characters.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControlSizeEst()">getControlSizeEst</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></CODE></DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the estimated rendered control size in characters<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/AbstractControl.html#getControlSizeEst()"><CODE>AbstractControl.getControlSizeEst()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="isDisabled()"><!-- --></A><H3>
isDisabled</H3>
<PRE>
public boolean <B>isDisabled</B>()</PRE>
<DL>
<DD>Return true if the form is a disabled.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the form is a disabled</DL>
</DD>
</DL>
<HR>

<A NAME="setDisabled(boolean)"><!-- --></A><H3>
setDisabled</H3>
<PRE>
public void <B>setDisabled</B>(boolean&nbsp;disabled)</PRE>
<DL>
<DD>Set the form disabled flag.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>disabled</CODE> - the form disabled flag</DL>
</DD>
</DL>
<HR>

<A NAME="getEnctype()"><!-- --></A><H3>
getEnctype</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getEnctype</B>()</PRE>
<DL>
<DD>Return the form "enctype" attribute value, or null if not defined.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the form "enctype" attribute value, or null if not defined</DL>
</DD>
</DL>
<HR>

<A NAME="setEnctype(java.lang.String)"><!-- --></A><H3>
setEnctype</H3>
<PRE>
public void <B>setEnctype</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;enctype)</PRE>
<DL>
<DD>Set the form "enctype" attribute value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>enctype</CODE> - the form "enctype" attribute value, or null if not defined</DL>
</DD>
</DL>
<HR>

<A NAME="getError()"><!-- --></A><H3>
getError</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getError</B>()</PRE>
<DL>
<DD>Return the form level error message.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the form level error message</DL>
</DD>
</DL>
<HR>

<A NAME="setError(java.lang.String)"><!-- --></A><H3>
setError</H3>
<PRE>
public void <B>setError</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;error)</PRE>
<DL>
<DD>Set the form level validation error message. If the error message is not
 null the form is invalid.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>error</CODE> - the validation error message</DL>
</DD>
</DL>
<HR>

<A NAME="getErrorFields()"><!-- --></A><H3>
getErrorFields</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt; <B>getErrorFields</B>()</PRE>
<DL>
<DD>Return a list of form fields which are not valid, not hidden and not
 disabled.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>list of form fields which are not valid, not hidden and not
  disabled</DL>
</DD>
</DL>
<HR>

<A NAME="getField(java.lang.String)"><!-- --></A><H3>
getField</H3>
<PRE>
public <A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A> <B>getField</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</PRE>
<DL>
<DD>Return the named field if contained in the form or null if not found.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the field
<DT><B>Returns:</B><DD>the named field if contained in the form
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalStateException.html" title="class or interface in java.lang">IllegalStateException</A></CODE> - if a non-field control is found with the
 specified name</DL>
</DD>
</DL>
<HR>

<A NAME="getFieldValue(java.lang.String)"><!-- --></A><H3>
getFieldValue</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getFieldValue</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</PRE>
<DL>
<DD>Return the field value for the named field, or null if the field is not
 found.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>name</CODE> - the name of the field
<DT><B>Returns:</B><DD>the field value for the named field</DL>
</DD>
</DL>
<HR>

<A NAME="getHeadElements()"><!-- --></A><H3>
getHeadElements</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/element/Element.html" title="class in org.apache.click.element">Element</A>&gt; <B>getHeadElements</B>()</PRE>
<DL>
<DD>Return the Form HEAD elements to be included in the page.
 The following resources are returned:

 <ul>
 <li><tt>click/control.css</tt></li>
 <li><tt>click/control.js</tt></li>
 </ul>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/Control.html#getHeadElements()">getHeadElements</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html#getHeadElements()">getHeadElements</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html" title="class in org.apache.click.control">AbstractControl</A></CODE></DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the form list of HEAD elements to be included in the page<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/Control.html#getHeadElements()"><CODE>Control.getHeadElements()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getMethod()"><!-- --></A><H3>
getMethod</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getMethod</B>()</PRE>
<DL>
<DD>Return the form method <tt>["post" | "get"]</tt>, default value is
 <tt>post</tt>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the form method</DL>
</DD>
</DL>
<HR>

<A NAME="setMethod(java.lang.String)"><!-- --></A><H3>
setMethod</H3>
<PRE>
public void <B>setMethod</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</PRE>
<DL>
<DD>Set the form method <tt>["post" | "get"]</tt>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the form method</DL>
</DD>
</DL>
<HR>

<A NAME="isFormSubmission()"><!-- --></A><H3>
isFormSubmission</H3>
<PRE>
public boolean <B>isFormSubmission</B>()</PRE>
<DL>
<DD>Return true if the page request is a submission from this form.
 <p/>
 A form submission requires the following criteria:
 <ul>
   <li>the Form name must be present as a request parameter (Form
   automatically adds a HiddenField which value is set to the Form name.
   This ensures the Form name is present when submitting the form)</li>
   <li>the request method must equal the Form <A HREF="../../../../org/apache/click/control/Form.html#method"><CODE>method</CODE></A>, for example
   both must be <tt>GET</tt> or <tt>POST</tt></li>
 </ul>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the page request is a submission from this form</DL>
</DD>
</DL>
<HR>

<A NAME="setName(java.lang.String)"><!-- --></A><H3>
setName</H3>
<PRE>
public void <B>setName</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;name)</PRE>
<DL>
<DD>Set the name of the form.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/Control.html#setName(java.lang.String)">setName</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html#setName(java.lang.String)">setName</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html" title="class in org.apache.click.control">AbstractControl</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>name</CODE> - of the control
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the name is null<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/Control.html#setName(java.lang.String)"><CODE>Control.setName(String)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="isReadonly()"><!-- --></A><H3>
isReadonly</H3>
<PRE>
public boolean <B>isReadonly</B>()</PRE>
<DL>
<DD>Return true if the form is a readonly.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the form is a readonly</DL>
</DD>
</DL>
<HR>

<A NAME="setReadonly(boolean)"><!-- --></A><H3>
setReadonly</H3>
<PRE>
public void <B>setReadonly</B>(boolean&nbsp;readonly)</PRE>
<DL>
<DD>Set the form readonly flag.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>readonly</CODE> - the form readonly flag</DL>
</DD>
</DL>
<HR>

<A NAME="isValid()"><!-- --></A><H3>
isValid</H3>
<PRE>
public boolean <B>isValid</B>()</PRE>
<DL>
<DD>Return true if the fields are valid and there is no form level error,
 otherwise return false.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the fields are valid and there is no form level error</DL>
</DD>
</DL>
<HR>

<A NAME="getFieldList()"><!-- --></A><H3>
getFieldList</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt; <B>getFieldList</B>()</PRE>
<DL>
<DD>Return the ordered list of form fields, excluding buttons.
 <p/>
 The order of the fields is the same order they were added to the form.
 <p/>
 The returned list includes only fields added directly to the Form.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the ordered List of form fields, excluding buttons</DL>
</DD>
</DL>
<HR>

<A NAME="getFields()"><!-- --></A><H3>
getFields</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>,<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&gt; <B>getFields</B>()</PRE>
<DL>
<DD>Return the Map of form fields (including buttons), keyed
 on field name.
 <p/>
 The returned map includes only fields added directly to the Form.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the Map of form fields (including buttons), keyed
 on field name<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/AbstractContainer.html#getControlMap()"><CODE>AbstractContainer.getControlMap()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getValidate()"><!-- --></A><H3>
getValidate</H3>
<PRE>
public boolean <B>getValidate</B>()</PRE>
<DL>
<DD>Return true if the Form fields should validate themselves when being
 processed.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the form fields should perform validation when being
  processed</DL>
</DD>
</DL>
<HR>

<A NAME="setValidate(boolean)"><!-- --></A><H3>
setValidate</H3>
<PRE>
public void <B>setValidate</B>(boolean&nbsp;validate)</PRE>
<DL>
<DD>Set the Form field validation flag, telling the Fields to validate
 themselves when their <tt>onProcess()</tt> method is invoked.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>validate</CODE> - the Form field validation flag</DL>
</DD>
</DL>
<HR>

<A NAME="getButtonAlign()"><!-- --></A><H3>
getButtonAlign</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getButtonAlign</B>()</PRE>
<DL>
<DD>Return the buttons &lt;td&gt; HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the field label HTML horizontal alignment</DL>
</DD>
</DL>
<HR>

<A NAME="setButtonAlign(java.lang.String)"><!-- --></A><H3>
setButtonAlign</H3>
<PRE>
public void <B>setButtonAlign</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;align)</PRE>
<DL>
<DD>Set the button &lt;td&gt; HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".
 Note the given align is not validated.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>align</CODE> - the field label HTML horizontal alignment</DL>
</DD>
</DL>
<HR>

<A NAME="getButtonList()"><!-- --></A><H3>
getButtonList</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control">Button</A>&gt; <B>getButtonList</B>()</PRE>
<DL>
<DD>Return the ordered list of <A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control"><CODE>Button</CODE></A>s.
 <p/>
 The order of the buttons is the same order they were added to the form.
 <p/>
 The returned list includes only buttons added directly to the Form.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the ordered list of <A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control"><CODE>Button</CODE></A>s.</DL>
</DD>
</DL>
<HR>

<A NAME="getButtonStyle()"><!-- --></A><H3>
getButtonStyle</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getButtonStyle</B>()</PRE>
<DL>
<DD>Return the button &lt;td&gt; "style" attribute value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the button &lt;td&gt; "style" attribute value</DL>
</DD>
</DL>
<HR>

<A NAME="setButtonStyle(java.lang.String)"><!-- --></A><H3>
setButtonStyle</H3>
<PRE>
public void <B>setButtonStyle</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</PRE>
<DL>
<DD>Set the button &lt;td&gt; "style" attribute value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the button &lt;td&gt; "style" attribute value</DL>
</DD>
</DL>
<HR>

<A NAME="getColumns()"><!-- --></A><H3>
getColumns</H3>
<PRE>
public int <B>getColumns</B>()</PRE>
<DL>
<DD>Return the number of form layout table columns. This property is used to
 layout the number of table columns the form is rendered with.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the number of form layout table columns</DL>
</DD>
</DL>
<HR>

<A NAME="setColumns(int)"><!-- --></A><H3>
setColumns</H3>
<PRE>
public void <B>setColumns</B>(int&nbsp;columns)</PRE>
<DL>
<DD>Set the number of form layout table columns. This property is used to
 layout the number of table columns the form is rendered with.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>columns</CODE> - the number of form layout table columns</DL>
</DD>
</DL>
<HR>

<A NAME="getDefaultFieldSize()"><!-- --></A><H3>
getDefaultFieldSize</H3>
<PRE>
public int <B>getDefaultFieldSize</B>()</PRE>
<DL>
<DD>Return the form default field size. If the form default field size is
 greater than 0, when fields are added to the form the field's size will
 be set to the default value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the form default field size</DL>
</DD>
</DL>
<HR>

<A NAME="setDefaultFieldSize(int)"><!-- --></A><H3>
setDefaultFieldSize</H3>
<PRE>
public void <B>setDefaultFieldSize</B>(int&nbsp;size)</PRE>
<DL>
<DD>Return the form default field size. If the form default field size is
 greater than 0, when fields are added to the form the field's size will
 be set to the default value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>size</CODE> - the default field size</DL>
</DD>
</DL>
<HR>

<A NAME="getErrorsAlign()"><!-- --></A><H3>
getErrorsAlign</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getErrorsAlign</B>()</PRE>
<DL>
<DD>Return the errors block HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the errors block HTML horizontal alignment</DL>
</DD>
</DL>
<HR>

<A NAME="setErrorsAlign(java.lang.String)"><!-- --></A><H3>
setErrorsAlign</H3>
<PRE>
public void <B>setErrorsAlign</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;align)</PRE>
<DL>
<DD>Set the errors block HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".
 Note the given align is not validated.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>align</CODE> - the errors block HTML horizontal alignment</DL>
</DD>
</DL>
<HR>

<A NAME="getErrorsPosition()"><!-- --></A><H3>
getErrorsPosition</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getErrorsPosition</B>()</PRE>
<DL>
<DD>Return the form errors position <tt>["top", "middle", "bottom"]</tt>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>form errors position</DL>
</DD>
</DL>
<HR>

<A NAME="setErrorsPosition(java.lang.String)"><!-- --></A><H3>
setErrorsPosition</H3>
<PRE>
public void <B>setErrorsPosition</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;position)</PRE>
<DL>
<DD>Set the form errors position <tt>["top", "middle", "bottom"]</tt>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>position</CODE> - the form errors position</DL>
</DD>
</DL>
<HR>

<A NAME="getErrorsStyle()"><!-- --></A><H3>
getErrorsStyle</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getErrorsStyle</B>()</PRE>
<DL>
<DD>Return the error &lt;td&gt; "style" attribute value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the error &lt;td&gt; "style" attribute value</DL>
</DD>
</DL>
<HR>

<A NAME="setErrorsStyle(java.lang.String)"><!-- --></A><H3>
setErrorsStyle</H3>
<PRE>
public void <B>setErrorsStyle</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</PRE>
<DL>
<DD>Set the errors &lt;td&gt; "style" attribute value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the errors &lt;td&gt; "style" attribute value</DL>
</DD>
</DL>
<HR>

<A NAME="getFieldStyle()"><!-- --></A><H3>
getFieldStyle</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getFieldStyle</B>()</PRE>
<DL>
<DD>Return the field &lt;td&gt; "style" attribute value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the field &lt;td&gt; "style" attribute value</DL>
</DD>
</DL>
<HR>

<A NAME="setFieldStyle(java.lang.String)"><!-- --></A><H3>
setFieldStyle</H3>
<PRE>
public void <B>setFieldStyle</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</PRE>
<DL>
<DD>Set the field &lt;td&gt; "style" attribute value. Fields can override
 this value by providing a <A HREF="../../../../org/apache/click/control/Field.html#setParentStyleHint(java.lang.String)"><CODE>Field.setParentStyleHint(java.lang.String)</CODE></A>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the field &lt;td&gt; "style" attribute value<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Field.html#setParentStyleHint(java.lang.String)"><CODE>Field.setParentStyleHint(java.lang.String)</CODE></A>, 
<A HREF="../../../../org/apache/click/control/Field.html#setParentStyleClassHint(java.lang.String)"><CODE>Field.setParentStyleClassHint(java.lang.String)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getFieldWidths()"><!-- --></A><H3>
getFieldWidths</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html" title="class or interface in java.lang">Integer</A>&gt; <B>getFieldWidths</B>()</PRE>
<DL>
<DD>Return the map of field width values, keyed on field name.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the map of field width values, keyed on field name</DL>
</DD>
</DL>
<HR>

<A NAME="isJavaScriptValidation()"><!-- --></A><H3>
isJavaScriptValidation</H3>
<PRE>
public boolean <B>isJavaScriptValidation</B>()</PRE>
<DL>
<DD>Return true if JavaScript client side form validation is enabled.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if JavaScript client side form validation is enabled</DL>
</DD>
</DL>
<HR>

<A NAME="getJavaScriptValidation()"><!-- --></A><H3>
getJavaScriptValidation</H3>
<PRE>
public boolean <B>getJavaScriptValidation</B>()</PRE>
<DL>
<DD><B>Deprecated.</B>&nbsp;<I>use <A HREF="../../../../org/apache/click/control/Form.html#isJavaScriptValidation()"><CODE>isJavaScriptValidation()</CODE></A> instead</I>
<P>
<DD>Return true if JavaScript client side form validation is enabled.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if JavaScript client side form validation is enabled</DL>
</DD>
</DL>
<HR>

<A NAME="setJavaScriptValidation(boolean)"><!-- --></A><H3>
setJavaScriptValidation</H3>
<PRE>
public void <B>setJavaScriptValidation</B>(boolean&nbsp;validate)</PRE>
<DL>
<DD>Set the JavaScript client side form validation flag.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>validate</CODE> - the JavaScript client side validation flag</DL>
</DD>
</DL>
<HR>

<A NAME="getLabelAlign()"><!-- --></A><H3>
getLabelAlign</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getLabelAlign</B>()</PRE>
<DL>
<DD>Return the field label HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the field label HTML horizontal alignment</DL>
</DD>
</DL>
<HR>

<A NAME="setLabelAlign(java.lang.String)"><!-- --></A><H3>
setLabelAlign</H3>
<PRE>
public void <B>setLabelAlign</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;align)</PRE>
<DL>
<DD>Set the field label HTML horizontal alignment: "<tt>left</tt>",
 "<tt>center</tt>", "<tt>right</tt>".
 Note the given align is not validated.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>align</CODE> - the field label HTML horizontal alignment</DL>
</DD>
</DL>
<HR>

<A NAME="getLabelsPosition()"><!-- --></A><H3>
getLabelsPosition</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getLabelsPosition</B>()</PRE>
<DL>
<DD>Return the form labels position <tt>["left", "top"]</tt>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>form labels position</DL>
</DD>
</DL>
<HR>

<A NAME="setLabelsPosition(java.lang.String)"><!-- --></A><H3>
setLabelsPosition</H3>
<PRE>
public void <B>setLabelsPosition</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;position)</PRE>
<DL>
<DD>Set the form labels position <tt>["left", "top"]</tt>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>position</CODE> - the form labels position</DL>
</DD>
</DL>
<HR>

<A NAME="getLabelStyle()"><!-- --></A><H3>
getLabelStyle</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>getLabelStyle</B>()</PRE>
<DL>
<DD>Return the label &lt;td&gt; "style" attribute value.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the label &lt;td&gt; "style" attribute value</DL>
</DD>
</DL>
<HR>

<A NAME="setLabelStyle(java.lang.String)"><!-- --></A><H3>
setLabelStyle</H3>
<PRE>
public void <B>setLabelStyle</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;value)</PRE>
<DL>
<DD>Set the label &lt;td&gt; "style" attribute value.
 <p/>
 This value can be overridden by Fields through their
 <A HREF="../../../../org/apache/click/control/Field.html#setParentStyleHint(java.lang.String)"><CODE>Field.setParentStyleHint(java.lang.String)</CODE></A> property.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>value</CODE> - the label &lt;td&gt; "style" attribute value</DL>
</DD>
</DL>
<HR>

<A NAME="setListener(java.lang.Object, java.lang.String)"><!-- --></A><H3>
setListener</H3>
<PRE>
public void <B>setListener</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;listener,
                        <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;method)</PRE>
<DL>
<DD>The callback listener will only be called during processing if the field
 value is valid. If the field has validation errors the listener will not
 be called.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/Control.html#setListener(java.lang.Object, java.lang.String)">setListener</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html#setListener(java.lang.Object, java.lang.String)">setListener</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractControl.html" title="class in org.apache.click.control">AbstractControl</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>listener</CODE> - the listener object with the named method to invoke<DD><CODE>method</CODE> - the name of the method to invoke<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/Control.html#setListener(java.lang.Object, java.lang.String)"><CODE>Control.setListener(Object, String)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="clearErrors()"><!-- --></A><H3>
clearErrors</H3>
<PRE>
public void <B>clearErrors</B>()</PRE>
<DL>
<DD>Clear any form or field errors by setting them to null.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="clearValues()"><!-- --></A><H3>
clearValues</H3>
<PRE>
public void <B>clearValues</B>()</PRE>
<DL>
<DD>Clear all the form field values setting them to null.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="copyFrom(java.lang.Object)"><!-- --></A><H3>
copyFrom</H3>
<PRE>
public void <B>copyFrom</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
<DD>Copy the given object's attributes into the Form's field values. In
 other words automatically populate Form's field values with the
 given objects attributes.
 <p/>
 The following example populates the Form field with Customer
 attributes:

 <pre class="prettyprint">
 public void onGet() {
     Long customerId = ..
     Customer customer = CustomerDAO.findByPK(customerId);
     form.copyFrom(customer);
 } </pre>

 copyForm also supports <tt>java.util.Map</tt> as an argument.
 <p/>
 By specifying a map, the Form's field values will be populated by
 matching key/value pairs. A match occurs when the map's key is equal to
 a field's name.
 <p/>
 The following example populates the Form fields with a map's
 key/value pairs:

 <pre class="prettyprint">
 public void onInit() {
     form = new Form("form");
     form.add(new TextField("name"));
     form.add(new TextField("address.street"));
 }

 public void onGet() {
     Map map = new HashMap();
     map.put("name", "Steve");
     map.put("address.street", "12 Long street");
     form.copyFrom(map);
 } </pre>

 For more information on how Fields and Objects are copied see
 <A HREF="../../../../org/apache/click/util/ContainerUtils.html#copyObjectToContainer(java.lang.Object, org.apache.click.control.Container)"><CODE>ContainerUtils.copyObjectToContainer(java.lang.Object, org.apache.click.control.Container)</CODE></A>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - the object to obtain attribute values from
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the object parameter is null</DL>
</DD>
</DL>
<HR>

<A NAME="copyFrom(java.lang.Object, boolean)"><!-- --></A><H3>
copyFrom</H3>
<PRE>
public void <B>copyFrom</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
                     boolean&nbsp;debug)</PRE>
<DL>
<DD>Copy the given object's attributes into the Form's field values. In other
 words automatically populate Forms field values with the given objects
 attributes. copyFrom also supports <tt>java.util.Map</tt> as an argument.
 <p/>
 If the debug parameter is true, debugging messages will be
 logged.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - the object to obtain attribute values from<DD><CODE>debug</CODE> - log debug statements when populating the form
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the object parameter is null<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Form.html#copyFrom(java.lang.Object)"><CODE>copyFrom(java.lang.Object)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="copyTo(java.lang.Object)"><!-- --></A><H3>
copyTo</H3>
<PRE>
public void <B>copyTo</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object)</PRE>
<DL>
<DD>Copy the Form's field values into the given object's attributes. In
 other words automatically populate Object attributes with the Form's
 field values.
 <p/>
 The following example populates the Customer attributes with the
 Form's field values:

 <pre class="prettyprint">
 public void onPost() {
     if (form.isValid()) {
         Customer customer = new Customer();
         form.copyTo(customer);
         ..
     }
     return true;
 } </pre>

 copyTo also supports <tt>java.util.Map</tt> as an argument.
 <p/>
 By specifying a map, the map's key/value pairs are populated from
 matching Form field names. A match occurs when a field's name is
 equal to a map's key.
 <p/>
 The following example populates the map with the Form field values:

 <pre class="prettyprint">
 public void onInit() {
     form = new Form("form");
     form.add(new TextField("name"));
     form.add(new TextField("address.street"));
 }

 public void onGet() {
     Map map = new HashMap();
     map.put("name", null);
     map.put("address.street", null);
     form.copyTo(map);
 } </pre>

 Note that the map acts as a template to specify which fields to populate
 from.

 For more information on how Fields and Objects are copied see
 <A HREF="../../../../org/apache/click/util/ContainerUtils.html#copyContainerToObject(org.apache.click.control.Container, java.lang.Object)"><CODE>ContainerUtils.copyContainerToObject(org.apache.click.control.Container, java.lang.Object)</CODE></A>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - the object to populate with field values
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the object parameter is null</DL>
</DD>
</DL>
<HR>

<A NAME="copyTo(java.lang.Object, boolean)"><!-- --></A><H3>
copyTo</H3>
<PRE>
public void <B>copyTo</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;object,
                   boolean&nbsp;debug)</PRE>
<DL>
<DD>Copy the Form's field values into the given object's attributes. In other
 words automatically populate Object attributes with the Forms field
 values. copyTo also supports <tt>java.util.Map</tt> as an argument.
 <p/>
 If the debug parameter is true, debugging messages will be
 logged.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>object</CODE> - the object to populate with field values<DD><CODE>debug</CODE> - log debug statements when populating the object
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the object parameter is null<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Form.html#copyTo(java.lang.Object)"><CODE>copyTo(java.lang.Object)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getState()"><!-- --></A><H3>
getState</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A> <B>getState</B>()</PRE>
<DL>
<DD>Return the form state. The following state is returned:

 <ul>
 <li>all the input Field values and FieldSets contained in the Form and
 child containers.</li>
 </ul>
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/Stateful.html#getState()">getState</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/Stateful.html" title="interface in org.apache.click">Stateful</A></CODE></DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the state of input Fields and FieldSets contained in the form</DL>
</DD>
</DL>
<HR>

<A NAME="setState(java.lang.Object)"><!-- --></A><H3>
setState</H3>
<PRE>
public void <B>setState</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;state)</PRE>
<DL>
<DD>Set the Form state. The state will be applied to all the input Fields
 and FieldSets contained in the Form or child containers.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/Stateful.html#setState(java.lang.Object)">setState</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/Stateful.html" title="interface in org.apache.click">Stateful</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>state</CODE> - the Form state to set</DL>
</DD>
</DL>
<HR>

<A NAME="onProcess()"><!-- --></A><H3>
onProcess</H3>
<PRE>
public boolean <B>onProcess</B>()</PRE>
<DL>
<DD>Process the Form and its child controls only if the Form was submitted
 by the user.
 <p/>
 This method invokes <A HREF="../../../../org/apache/click/control/Form.html#isFormSubmission()"><CODE>isFormSubmission()</CODE></A> to check whether the form
 was submitted or not.
 <p/>
 The Forms processing order is:
 <ol>
 <li>All <A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control"><CODE>Field</CODE></A> controls in the order they were added</li>
 <li>All <A HREF="../../../../org/apache/click/control/Button.html" title="class in org.apache.click.control"><CODE>Button</CODE></A> controls in the order they were added</li>
 <li>Invoke the Forms listener if defined</li>
 </ol>

 This method delegates validation to <A HREF="../../../../org/apache/click/control/Form.html#validate()"><CODE>validate()</CODE></A> while
 file upload validation are delegated to <A HREF="../../../../org/apache/click/control/Form.html#validateFileUpload()"><CODE>validateFileUpload()</CODE></A>.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/Control.html#onProcess()">onProcess</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#onProcess()">onProcess</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></CODE></DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true to continue Page event processing or false otherwise<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/Context.html#getRequestParameter(java.lang.String)"><CODE>Context.getRequestParameter(String)</CODE></A>, 
<A HREF="../../../../org/apache/click/Context.html#getFileItemMap()"><CODE>Context.getFileItemMap()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="onDestroy()"><!-- --></A><H3>
onDestroy</H3>
<PRE>
public void <B>onDestroy</B>()</PRE>
<DL>
<DD>Destroy the controls contained in the Form and clear any form
 error message.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/Control.html#onDestroy()">onDestroy</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#onDestroy()">onDestroy</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/Control.html#onDestroy()"><CODE>Control.onDestroy()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="validate()"><!-- --></A><H3>
validate</H3>
<PRE>
public void <B>validate</B>()</PRE>
<DL>
<DD>The validate method is invoked by <A HREF="../../../../org/apache/click/control/Form.html#onProcess()"><CODE>onProcess()</CODE></A> to validate
 the request submission. A Form subclass can override this method
 to implement cross-field validation logic.
 <p/>
 If the Form determines that the submission is invalid it should set the
 <A HREF="../../../../org/apache/click/control/Form.html#error"><CODE>error</CODE></A> property with an appropriate error message. For example:

 <pre class="prettyprint">
 public class RegistrationForm extends Form {

     // Add validation to ensure the password and confirmPassword fields match
     public void validate() {
         String password = getFieldValue("password");
         String confirmPassword = getFieldValue("confirmPassword");
         if (!password.equals(confirmPassword)) {

             // Set Form's error property value that will be shown to the user
             setError("The passwords do not match.");
         }
     }
 } </pre>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="onSubmitCheck(org.apache.click.Page, java.lang.String)"><!-- --></A><H3>
onSubmitCheck</H3>
<PRE>
public boolean <B>onSubmitCheck</B>(<A HREF="../../../../org/apache/click/Page.html" title="class in org.apache.click">Page</A>&nbsp;page,
                             <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;redirectPath)</PRE>
<DL>
<DD>Perform a form submission check ensuring the user has not replayed the
 form submission by using the browser's back or refresh buttons or by
 clicking the Form submit button twice, in quick succession. If the form
 submit is valid this method will return true, otherwise set the page to
 redirect to the given redirectPath and return false.
 <p/>
 This method will add a token to the user's session and a hidden field
 to the form to validate future submits.
 <p/>
 Form submit checks should be performed before the pages controls are
 processed in the Page onSecurityCheck method. For example:

 <pre class="prettyprint">
 public class Order extends Page {
     ..

     public boolean onSecurityCheck() {
         return form.onSubmitCheck(this, "/invalid-submit.html");
     }
 } </pre>

 Form submit checks should generally be combined with the Post-Redirect
 pattern which provides a better user experience when pages are refreshed.
 <p/>
 <b>Please note:</b> a call to onSubmitCheck always succeeds for Ajax
 requests.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>page</CODE> - the page invoking the Form submit check<DD><CODE>redirectPath</CODE> - the path to redirect invalid submissions to
<DT><B>Returns:</B><DD>true if the form submit is OK or false otherwise
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the page or redirectPath is null</DL>
</DD>
</DL>
<HR>

<A NAME="onSubmitCheck(org.apache.click.Page, java.lang.Class)"><!-- --></A><H3>
onSubmitCheck</H3>
<PRE>
public boolean <B>onSubmitCheck</B>(<A HREF="../../../../org/apache/click/Page.html" title="class in org.apache.click">Page</A>&nbsp;page,
                             <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html" title="class or interface in java.lang">Class</A>&lt;? extends <A HREF="../../../../org/apache/click/Page.html" title="class in org.apache.click">Page</A>&gt;&nbsp;pageClass)</PRE>
<DL>
<DD>Perform a form submission check ensuring the user has not replayed the
 form submission by using the browser back button. If the form submit
 is valid this method will return true, otherwise set the page to
 redirect to the given Page class and return false.
 <p/>
 This method will add a token to the user's session and a hidden field
 to the form to validate future submits.
 <p/>
 Form submit checks should be performed before the pages controls are
 processed in the Page onSecurityCheck method. For example:

 <pre class="prettyprint">
 public class Order extends Page {
     ..

     public boolean onSecurityCheck() {
         return form.onSubmitCheck(this, InvalidSubmitPage.class);
     }
 } </pre>

 Form submit checks should generally be combined with the Post-Redirect
 pattern which provides a better user experience when pages are refreshed.
 <p/>
 <b>Please note:</b> a call to onSubmitCheck always succeeds for Ajax
 requests.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>page</CODE> - the page invoking the Form submit check<DD><CODE>pageClass</CODE> - the page class to redirect invalid submissions to
<DT><B>Returns:</B><DD>true if the form submit is OK or false otherwise
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the page or pageClass is null</DL>
</DD>
</DL>
<HR>

<A NAME="onSubmitCheck(org.apache.click.Page, java.lang.Object, java.lang.String)"><!-- --></A><H3>
onSubmitCheck</H3>
<PRE>
public boolean <B>onSubmitCheck</B>(<A HREF="../../../../org/apache/click/Page.html" title="class in org.apache.click">Page</A>&nbsp;page,
                             <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html" title="class or interface in java.lang">Object</A>&nbsp;submitListener,
                             <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>&nbsp;submitListenerMethod)</PRE>
<DL>
<DD>Perform a form submission check ensuring the user has not replayed the
 form submission by using the browser back button. If the form submit
 is valid this method will return true, otherwise the given listener
 object and method will be invoked.
 <p/>
 This method will add a token to the users session and a hidden field
 to the form to validate future submit's.
 <p/>
 Form submit checks should be performed before the pages controls are
 processed in the Page onSecurityCheck method. For example:

 <pre class="prettyprint">
 public class Order extends Page {
     ..

     public boolean onSecurityCheck() {
         return form.onSubmitCheck(his, this, "onInvalidSubmit");
     }

     public boolean onInvalidSubmit() {
        getContext().setRequestAttribute("invalidPath", getPath());
        setForward("invalid-submit.htm");
        return false;
     }
 } </pre>

 Form submit checks should generally be combined with the Post-Redirect
 pattern which provides a better user experience when pages are refreshed.
 <p/>
 <b>Please note:</b> a call to onSubmitCheck always succeeds for Ajax
 requests.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>page</CODE> - the page invoking the Form submit check<DD><CODE>submitListener</CODE> - the listener object to call when an invalid submit
      occurs<DD><CODE>submitListenerMethod</CODE> - the listener method to invoke when an
      invalid submit occurs
<DT><B>Returns:</B><DD>true if the form submit is valid, or the return value of the
      listener method otherwise
<DT><B>Throws:</B>
<DD><CODE><A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/IllegalArgumentException.html" title="class or interface in java.lang">IllegalArgumentException</A></CODE> - if the page, submitListener or
      submitListenerMethod is null</DL>
</DD>
</DL>
<HR>

<A NAME="removeState(org.apache.click.Context)"><!-- --></A><H3>
removeState</H3>
<PRE>
public void <B>removeState</B>(<A HREF="../../../../org/apache/click/Context.html" title="class in org.apache.click">Context</A>&nbsp;context)</PRE>
<DL>
<DD>Remove the Form state from the session for the given request context.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>context</CODE> - the request context<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Form.html#saveState(org.apache.click.Context)"><CODE>saveState(org.apache.click.Context)</CODE></A>, 
<A HREF="../../../../org/apache/click/control/Form.html#restoreState(org.apache.click.Context)"><CODE>restoreState(org.apache.click.Context)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="restoreState(org.apache.click.Context)"><!-- --></A><H3>
restoreState</H3>
<PRE>
public void <B>restoreState</B>(<A HREF="../../../../org/apache/click/Context.html" title="class in org.apache.click">Context</A>&nbsp;context)</PRE>
<DL>
<DD>Restore the Form state from the session for the given request context.
 <p/>
 This method delegates to <A HREF="../../../../org/apache/click/control/Form.html#setState(java.lang.Object)"><CODE>setState(java.lang.Object)</CODE></A> to set the
 form restored state.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>context</CODE> - the request context<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Form.html#saveState(org.apache.click.Context)"><CODE>saveState(org.apache.click.Context)</CODE></A>, 
<A HREF="../../../../org/apache/click/control/Form.html#removeState(org.apache.click.Context)"><CODE>removeState(org.apache.click.Context)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="saveState(org.apache.click.Context)"><!-- --></A><H3>
saveState</H3>
<PRE>
public void <B>saveState</B>(<A HREF="../../../../org/apache/click/Context.html" title="class in org.apache.click">Context</A>&nbsp;context)</PRE>
<DL>
<DD>Save the Form state to the session for the given request context.
 <p/>
 * This method delegates to <A HREF="../../../../org/apache/click/control/Form.html#getState()"><CODE>getState()</CODE></A> to retrieve the form state
 to save.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>context</CODE> - the request context<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/Form.html#restoreState(org.apache.click.Context)"><CODE>restoreState(org.apache.click.Context)</CODE></A>, 
<A HREF="../../../../org/apache/click/control/Form.html#removeState(org.apache.click.Context)"><CODE>removeState(org.apache.click.Context)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="startTag()"><!-- --></A><H3>
startTag</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>startTag</B>()</PRE>
<DL>
<DD>Return the rendered opening form tag and all the forms hidden fields.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the rendered form start tag and the forms hidden fields</DL>
</DD>
</DL>
<HR>

<A NAME="endTag()"><!-- --></A><H3>
endTag</H3>
<PRE>
public <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A> <B>endTag</B>()</PRE>
<DL>
<DD>Return the rendered form end tag and JavaScript for field focus
 and validation.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the rendered form end tag</DL>
</DD>
</DL>
<HR>

<A NAME="render(org.apache.click.util.HtmlStringBuffer)"><!-- --></A><H3>
render</H3>
<PRE>
public void <B>render</B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer)</PRE>
<DL>
<DD>Render the HTML representation of the Form.
 <p/>
 If the form contains errors after processing, these errors will be
 rendered.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../../../org/apache/click/Control.html#render(org.apache.click.util.HtmlStringBuffer)">render</A></CODE> in interface <CODE><A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A></CODE><DT><B>Overrides:</B><DD><CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html#render(org.apache.click.util.HtmlStringBuffer)">render</A></CODE> in class <CODE><A HREF="../../../../org/apache/click/control/AbstractContainer.html" title="class in org.apache.click.control">AbstractContainer</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the specified buffer to render the control's output to<DT><B>See Also:</B><DD><A HREF="../../../../org/apache/click/control/AbstractContainer.html#toString()"><CODE>AbstractContainer.toString()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="performSubmitCheck()"><!-- --></A><H3>
performSubmitCheck</H3>
<PRE>
protected boolean <B>performSubmitCheck</B>()</PRE>
<DL>
<DD>Perform a back button submit check, returning true if the request is
 valid or false otherwise. This method will add a submit check token
 to the form as a hidden field, and to the session.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if the submit is OK or false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="getFormSizeEst(java.util.List)"><!-- --></A><H3>
getFormSizeEst</H3>
<PRE>
protected int <B>getFormSizeEst</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields)</PRE>
<DL>
<DD>Return the estimated rendered form size in characters.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>formFields</CODE> - the list of form fields
<DT><B>Returns:</B><DD>the estimated rendered form size in characters</DL>
</DD>
</DL>
<HR>

<A NAME="renderHeader(org.apache.click.util.HtmlStringBuffer, java.util.List)"><!-- --></A><H3>
renderHeader</H3>
<PRE>
protected void <B>renderHeader</B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
                            <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields)</PRE>
<DL>
<DD>Render the given form start tag and the form hidden fields to the given
 buffer.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the HTML string buffer to render to<DD><CODE>formFields</CODE> - the list of form fields</DL>
</DD>
</DL>
<HR>

<A NAME="renderFields(org.apache.click.util.HtmlStringBuffer)"><!-- --></A><H3>
renderFields</H3>
<PRE>
protected void <B>renderFields</B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer)</PRE>
<DL>
<DD>Render the non hidden Form Fields to the string buffer.
 <p/>
 This method delegates the rendering of the form fields to
 <A HREF="../../../../org/apache/click/control/Form.html#renderControls(org.apache.click.util.HtmlStringBuffer, org.apache.click.control.Container, java.util.List, java.util.Map, int)"><CODE>renderControls(HtmlStringBuffer, Container, List, Map, int)</CODE></A>.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the StringBuffer to render to</DL>
</DD>
</DL>
<HR>

<A NAME="renderControls(org.apache.click.util.HtmlStringBuffer, org.apache.click.control.Container, java.util.List, java.util.Map, int)"><!-- --></A><H3>
renderControls</H3>
<PRE>
protected void <B>renderControls</B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
                              <A HREF="../../../../org/apache/click/control/Container.html" title="interface in org.apache.click.control">Container</A>&nbsp;container,
                              <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/Control.html" title="interface in org.apache.click">Control</A>&gt;&nbsp;controls,
                              <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html" title="class or interface in java.util">Map</A>&lt;<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html" title="class or interface in java.lang">String</A>,<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html" title="class or interface in java.lang">Integer</A>&gt;&nbsp;fieldWidths,
                              int&nbsp;columns)</PRE>
<DL>
<DD>Render the specified controls of the container to the string buffer.
 <p/>
 fieldWidths is a map specifying the width for specific fields contained
 in the list of controls. The fieldWidths map is keyed on field name.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the StringBuffer to render to<DD><CODE>container</CODE> - the container which controls to render<DD><CODE>controls</CODE> - the controls to render<DD><CODE>fieldWidths</CODE> - a map of field widths keyed on field name<DD><CODE>columns</CODE> - the number of form layout table columns</DL>
</DD>
</DL>
<HR>

<A NAME="renderErrors(org.apache.click.util.HtmlStringBuffer, boolean)"><!-- --></A><H3>
renderErrors</H3>
<PRE>
protected void <B>renderErrors</B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
                            boolean&nbsp;processed)</PRE>
<DL>
<DD>Render the form errors to the given buffer is form processed.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the string buffer to render the errors to<DD><CODE>processed</CODE> - the flag indicating whether has been processed</DL>
</DD>
</DL>
<HR>

<A NAME="renderButtons(org.apache.click.util.HtmlStringBuffer)"><!-- --></A><H3>
renderButtons</H3>
<PRE>
protected void <B>renderButtons</B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer)</PRE>
<DL>
<DD>Render the given list of Buttons to the string buffer.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the StringBuffer to render to</DL>
</DD>
</DL>
<HR>

<A NAME="renderTagEnd(java.util.List, org.apache.click.util.HtmlStringBuffer)"><!-- --></A><H3>
renderTagEnd</H3>
<PRE>
protected void <B>renderTagEnd</B>(<A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields,
                            <A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer)</PRE>
<DL>
<DD>Close the form tag and render any additional content after the Form.
 <p/>
 Additional content includes <tt>javascript validation</tt> and
 <tt>javascript focus</tt> scripts.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>formFields</CODE> - all fields contained within the form<DD><CODE>buffer</CODE> - the buffer to render to</DL>
</DD>
</DL>
<HR>

<A NAME="renderFocusJavaScript(org.apache.click.util.HtmlStringBuffer, java.util.List)"><!-- --></A><H3>
renderFocusJavaScript</H3>
<PRE>
protected void <B>renderFocusJavaScript</B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
                                     <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields)</PRE>
<DL>
<DD>Render the Form field focus JavaScript to the string buffer.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the StringBuffer to render to<DD><CODE>formFields</CODE> - the list of form fields</DL>
</DD>
</DL>
<HR>

<A NAME="renderValidationJavaScript(org.apache.click.util.HtmlStringBuffer, java.util.List)"><!-- --></A><H3>
renderValidationJavaScript</H3>
<PRE>
protected void <B>renderValidationJavaScript</B>(<A HREF="../../../../org/apache/click/util/HtmlStringBuffer.html" title="class in org.apache.click.util">HtmlStringBuffer</A>&nbsp;buffer,
                                          <A HREF="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html" title="class or interface in java.util">List</A>&lt;<A HREF="../../../../org/apache/click/control/Field.html" title="class in org.apache.click.control">Field</A>&gt;&nbsp;formFields)</PRE>
<DL>
<DD>Render the Form validation JavaScript to the string buffer.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>buffer</CODE> - the StringBuffer to render to<DD><CODE>formFields</CODE> - the list of form fields</DL>
</DD>
</DL>
<HR>

<A NAME="hasPostError()"><!-- --></A><H3>
hasPostError</H3>
<PRE>
protected boolean <B>hasPostError</B>()</PRE>
<DL>
<DD>Returns true if a POST error occurred, false otherwise.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if a POST error occurred, false otherwise</DL>
</DD>
</DL>
<HR>

<A NAME="validateFileUpload()"><!-- --></A><H3>
validateFileUpload</H3>
<PRE>
protected void <B>validateFileUpload</B>()</PRE>
<DL>
<DD>Validate the request for any file upload (multipart) errors.
 <p/>
 A form error message is displayed if a file upload error occurs.
 These messages are defined in the resource bundle:
 <blockquote>
 <ul>
   <li>/click-control.properties
     <ul>
       <li>file-size-limit-exceeded-error</li>
       <li>post-size-limit-exceeded-error</li>
     </ul>
   </li>
 </ul>
 </blockquote>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../org/apache/click/control/FileField.html" title="class in org.apache.click.control"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../../org/apache/click/control/HiddenField.html" title="class in org.apache.click.control"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?org/apache/click/control/Form.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Form.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

<style type='text/css'>.str{color:#2A00FF;}.kwd{color:#7F0055;font-weight:bold;}.com{color:#3F7F5F;}.typ{color:#000;}.lit{color:#066;}.pun{color:#660;}.pln{color:#000;}.tag{color:#000099;font-weight:bold;}.atn{color:#009900;}.atv{color:#000;}.dec{color:#606;}pre.prettyprint{padding:1em;border:1px solid #888;overflow:auto;}@media print{.str{color:#2A00FF;}.kwd{color:#7F0055;font-weight:bold;}.com{color:#3F7F5F;font-style:italic;}.typ{color:#000;font-weight:bold;}.lit{color:#044;}.pun{color:#440;}.pln{color:#000;}.tag{color:#000099;font-weight:bold;}.atn{color:#009900;}.atv{color:#000;}}</style><script type='text/javascript'>var PR_keywords={};(function(){var CPP_KEYWORDS='abstract bool break case catch char class const '+'const_cast continue default delete deprecated dllexport dllimport do '+'double dynamic_cast else enum explicit extern false float for friend '+'goto if inline int long mutable naked namespace new noinline noreturn '+'nothrow novtable operator private property protected public register '+'reinterpret_cast return selectany short signed sizeof static '+'static_cast struct switch template this thread throw true try typedef '+'typeid typename union unsigned using declaration, directive uuid '+'virtual void volatile while typeof';var CSHARP_KEYWORDS='as base by byte checked decimal delegate descending '+'event finally fixed foreach from group implicit in interface internal '+'into is lock null object override orderby params readonly ref sbyte '+'sealed stackalloc string select uint ulong unchecked unsafe ushort var';var JAVA_KEYWORDS='package synchronized boolean implements import throws '+'instanceof transient extends final strictfp native super';var JSCRIPT_KEYWORDS='debugger export function with NaN Infinity';var PERL_KEYWORDS='require sub unless until use elsif BEGIN END';var PYTHON_KEYWORDS='and assert def del elif except exec global lambda '+'not or pass print raise yield False True None';var RUBY_KEYWORDS='then end begin rescue ensure module when undef next '+'redo retry alias defined';var SH_KEYWORDS='done fi';var KEYWORDS=[CPP_KEYWORDS,CSHARP_KEYWORDS,JAVA_KEYWORDS,JSCRIPT_KEYWORDS,PERL_KEYWORDS,PYTHON_KEYWORDS,RUBY_KEYWORDS,SH_KEYWORDS];for(var k=0;k<KEYWORDS.length;k++){var kw=KEYWORDS[k].split(' ');for(var i=0;i<kw.length;i++){if(kw[i]){PR_keywords[kw[i]]=true;}}}}).call(this);var PR_STRING='str';var PR_KEYWORD='kwd';var PR_COMMENT='com';var PR_TYPE='typ';var PR_LITERAL='lit';var PR_PUNCTUATION='pun';var PR_PLAIN='pln';var PR_TAG='tag';var PR_DECLARATION='dec';var PR_SOURCE='src';var PR_ATTRIB_NAME='atn';var PR_ATTRIB_VALUE='atv';var PR_TAB_WIDTH=8;function PR_isWordChar(ch){return(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z');}function PR_spliceArrayInto(inserted,container,containerPosition,countReplaced){inserted.unshift(containerPosition,countReplaced||0);try{container.splice.apply(container,inserted);}finally{inserted.splice(0,2);}}var REGEXP_PRECEDER_PATTERN=(function(){var preceders=['!','!=','!==','#','%','%=','&','&&','&&=','&=','(','*','*=','+=',',','-=','->','/','/=',':','::',';','<','<<','<<=','<=','=','==','===','>','>=','>>','>>=','>>>','>>>=','?','@','[','^','^=','^^','^^=','{','|','|=','||','||=','~','break','case','continue','delete','do','else','finally','instanceof','return','throw','try','typeof'];var pattern='(?:'+'(?:(?:^|[^0-9\.])\\.{1,3})|'+'(?:(?:^|[^\\+])\\+)|'+'(?:(?:^|[^\\-])-)';for(var i=0;i<preceders.length;++i){var preceder=preceders[i];if(PR_isWordChar(preceder.charAt(0))){pattern+='|\\b'+preceder;}else{pattern+='|'+preceder.replace(/([^=<>:&])/g,'\\$1');}}pattern+='|^)\\s*$';return new RegExp(pattern);})();var pr_amp=/&/g;var pr_lt=/</g;var pr_gt=/>/g;var pr_quot=/"/g;function PR_attribToHtml(str){return str.replace(pr_amp,'&amp;').replace(pr_lt,'&lt;').replace(pr_gt,'&gt;').replace(pr_quot,'&quot;');}function PR_textToHtml(str){return str.replace(pr_amp,'&amp;').replace(pr_lt,'&lt;').replace(pr_gt,'&gt;');}var pr_ltEnt=/&lt;/g;var pr_gtEnt=/&gt;/g;var pr_aposEnt=/&apos;/g;var pr_quotEnt=/&quot;/g;var pr_ampEnt=/&amp;/g;function PR_htmlToText(html){var pos=html.indexOf('&');if(pos<0){return html;}for(--pos;(pos=html.indexOf('&#',pos+1))>=0;){var end=html.indexOf(';',pos);if(end>=0){var num=html.substring(pos+3,end);var radix=10;if(num&&num.charAt(0)=='x'){num=num.substring(1);radix=16;}var codePoint=parseInt(num,radix);if(!isNaN(codePoint)){html=(html.substring(0,pos)+String.fromCharCode(codePoint)+html.substring(end+1));}}}return html.replace(pr_ltEnt,'<').replace(pr_gtEnt,'>').replace(pr_aposEnt,"'").replace(pr_quotEnt,'"').replace(pr_ampEnt,'&');}function PR_isRawContent(node){return'XMP'==node.tagName;}var PR_innerHtmlWorks=null;function PR_getInnerHtml(node){if(null===PR_innerHtmlWorks){var testNode=document.createElement('PRE');testNode.appendChild(document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));PR_innerHtmlWorks=!/</.test(testNode.innerHTML);}if(PR_innerHtmlWorks){var content=node.innerHTML;if(PR_isRawContent(node)){content=PR_textToHtml(content);}return content;}var out=[];for(var child=node.firstChild;child;child=child.nextSibling){PR_normalizedHtml(child,out);}return out.join('');}function PR_normalizedHtml(node,out){switch(node.nodeType){case 1:var name=node.tagName.toLowerCase();out.push('\074',name);for(var i=0;i<node.attributes.length;++i){var attr=node.attributes[i];if(!attr.specified){continue;}out.push(' ');PR_normalizedHtml(attr,out);}out.push('>');for(var child=node.firstChild;child;child=child.nextSibling){PR_normalizedHtml(child,out);}if(node.firstChild||!/^(?:br|link|img)$/.test(name)){out.push('<\/',name,'>');}break;case 2:out.push(node.name.toLowerCase(),'="',PR_attribToHtml(node.value),'"');break;case 3:case 4:out.push(PR_textToHtml(node.nodeValue));break;}}function PR_tabExpander(tabWidth){var SPACES='                ';var charInLine=0;return function(plainText){var out=null;var pos=0;for(var i=0,n=plainText.length;i<n;++i){var ch=plainText.charAt(i);switch(ch){case'\t':if(!out){out=[];}out.push(plainText.substring(pos,i));var nSpaces=tabWidth-(charInLine%tabWidth);charInLine+=nSpaces;for(;nSpaces>=0;nSpaces-=SPACES.length){out.push(SPACES.substring(0,nSpaces));}pos=i+1;break;case'\n':charInLine=0;break;default:++charInLine;}}if(!out){return plainText;}out.push(plainText.substring(pos));return out.join('');};}var pr_chunkPattern=/(?:[^<]+|<!--[\s\S]*?-->|<!\[CDATA\[([\s\S]*?)\]\]>|<\/?[a-zA-Z][^>]*>|<)/g;var pr_commentPrefix=/^<!--/;var pr_cdataPrefix=/^<\[CDATA\[/;var pr_brPrefix=/^<br\b/i;function PR_extractTags(s){var matches=s.match(pr_chunkPattern);var sourceBuf=[];var sourceBufLen=0;var extractedTags=[];if(matches){for(var i=0,n=matches.length;i<n;++i){var match=matches[i];if(match.length>1&&match.charAt(0)==='<'){if(pr_commentPrefix.test(match)){continue;}if(pr_cdataPrefix.test(match)){sourceBuf.push(match.substring(9,match.length-3));sourceBufLen+=match.length-12;}else if(pr_brPrefix.test(match)){sourceBuf.push('\n');sourceBufLen+=1;}else{extractedTags.push(sourceBufLen,match);}}else{var literalText=PR_htmlToText(match);sourceBuf.push(literalText);sourceBufLen+=literalText.length;}}}return{source:sourceBuf.join(''),tags:extractedTags};}function PR_createSimpleLexer(shortcutStylePatterns,fallthroughStylePatterns){var shortcuts={};(function(){var allPatterns=shortcutStylePatterns.concat(fallthroughStylePatterns);for(var i=allPatterns.length;--i>=0;){var patternParts=allPatterns[i];var shortcutChars=patternParts[3];if(shortcutChars){for(var c=shortcutChars.length;--c>=0;){shortcuts[shortcutChars.charAt(c)]=patternParts;}}}})();var nPatterns=fallthroughStylePatterns.length;return function(sourceCode,opt_basePos){opt_basePos=opt_basePos||0;var decorations=[opt_basePos,PR_PLAIN];var lastToken='';var pos=0;var tail=sourceCode;while(tail.length){var style;var token=null;var patternParts=shortcuts[tail.charAt(0)];if(patternParts){var match=tail.match(patternParts[1]);token=match[0];style=patternParts[0];}else{for(var i=0;i<nPatterns;++i){patternParts=fallthroughStylePatterns[i];var contextPattern=patternParts[2];if(contextPattern&&!contextPattern.test(lastToken)){continue;}var match=tail.match(patternParts[1]);if(match){token=match[0];style=patternParts[0];break;}}if(!token){style=PR_PLAIN;token=tail.substring(0,1);}}decorations.push(opt_basePos+pos,style);pos+=token.length;tail=tail.substring(token.length);if(style!==PR_COMMENT&&/\S/.test(token)){lastToken=token;}}return decorations;};}var PR_C_STYLE_STRING_AND_COMMENT_LEXER=PR_createSimpleLexer([[PR_STRING,/^\'(?:[^\\\']|\\[\s\S])*(?:\'|$)/,null,"'"],[PR_STRING,/^"(?:[^\\"]|\\[\s\S])*(?:"|$)/,null,'"'],[PR_STRING,/^\`(?:[^\\\`]|\\[\s\S])*(?:\`|$)/,null,'`']],[[PR_PLAIN,/^(?:[^\'"\`\/\#]+)/,null,' \r\n'],[PR_COMMENT,/^#[^\r\n]*/,null,'#'],[PR_COMMENT,/^\/\/[^\r\n]*/,null],[PR_STRING,/^\/(?:[^\\\*\/]|\\[\s\S])+(?:\/|$)/,REGEXP_PRECEDER_PATTERN],[PR_COMMENT,/^\/\*[\s\S]*?(?:\*\/|$)/,null]]);function PR_splitStringAndCommentTokens(sourceCode){return PR_C_STYLE_STRING_AND_COMMENT_LEXER(sourceCode);}var PR_C_STYLE_LITERAL_IDENTIFIER_PUNC_RECOGNIZER=PR_createSimpleLexer([],[[PR_PLAIN,/^\s+/,null,' \r\n'],[PR_PLAIN,/^[a-z_$@][a-z_$@0-9]*/i,null],[PR_LITERAL,/^0x[a-f0-9]+[a-z]/i,null],[PR_LITERAL,/^(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?[a-z]*/i,null,'123456789'],[PR_PUNCTUATION,/^[^\s\w\.$@]+/,null]]);function PR_splitNonStringNonCommentTokens(source,decorations){for(var i=0;i<decorations.length;i+=2){var style=decorations[i+1];if(style===PR_PLAIN){var start=decorations[i];var end=i+2<decorations.length?decorations[i+2]:source.length;var chunk=source.substring(start,end);var subDecs=PR_C_STYLE_LITERAL_IDENTIFIER_PUNC_RECOGNIZER(chunk,start);for(var j=0,m=subDecs.length;j<m;j+=2){var subStyle=subDecs[j+1];if(subStyle===PR_PLAIN){var subStart=subDecs[j];var subEnd=j+2<m?subDecs[j+2]:chunk.length;var token=source.substring(subStart,subEnd);if(token=='.'){subDecs[j+1]=PR_PUNCTUATION;}else if(token in PR_keywords){subDecs[j+1]=PR_KEYWORD;}else if(/^@?[A-Z][A-Z$]*[a-z][A-Za-z$]*$/.test(token)){subDecs[j+1]=token.charAt(0)=='@'?PR_LITERAL:PR_TYPE;}}}PR_spliceArrayInto(subDecs,decorations,i,2);i+=subDecs.length-2;}}return decorations;}var PR_MARKUP_LEXER=PR_createSimpleLexer([],[[PR_PLAIN,/^[^<]+/,null],[PR_DECLARATION,/^<!\w[^>]*(?:>|$)/,null],[PR_COMMENT,/^<!--[\s\S]*?(?:-->|$)/,null],[PR_SOURCE,/^<\?[\s\S]*?(?:\?>|$)/,null],[PR_SOURCE,/^<%[\s\S]*?(?:%>|$)/,null],[PR_SOURCE,/^<(script|style|xmp)\b[^>]*>[\s\S]*?<\/\1\b[^>]*>/i,null],[PR_TAG,/^<\/?\w[^<>]*>/,null]]);var PR_SOURCE_CHUNK_PARTS=/^(<[^>]*>)([\s\S]*)(<\/[^>]*>)$/;function PR_tokenizeMarkup(source){var decorations=PR_MARKUP_LEXER(source);for(var i=0;i<decorations.length;i+=2){if(decorations[i+1]===PR_SOURCE){var start=decorations[i];var end=i+2<decorations.length?decorations[i+2]:source.length;var sourceChunk=source.substring(start,end);var match=(sourceChunk.match(PR_SOURCE_CHUNK_PARTS));if(match){decorations.splice(i,2,start,PR_TAG,start+match[1].length,PR_SOURCE,start+match[1].length+(match[2]||'').length,PR_TAG);}}}return decorations;}var PR_TAG_LEXER=PR_createSimpleLexer([[PR_ATTRIB_VALUE,/^\'[^\']*(?:\'|$)/,null,"'"],[PR_ATTRIB_VALUE,/^"[^"]*(?:"|$)/,null,'"'],[PR_PUNCTUATION,/^[<>\/=]+/,null,'<>/=']],[[PR_TAG,/^[\w-]+/,/^</],[PR_ATTRIB_VALUE,/^[\w-]+/,/^=/],[PR_ATTRIB_NAME,/^[\w-]+/,null],[PR_PLAIN,/^\s+/,null,' \r\n']]);function PR_splitTagAttributes(source,decorations){for(var i=0;i<decorations.length;i+=2){var style=decorations[i+1];if(style===PR_TAG){var start=decorations[i];var end=i+2<decorations.length?decorations[i+2]:source.length;var chunk=source.substring(start,end);var subDecorations=PR_TAG_LEXER(chunk,start);PR_spliceArrayInto(subDecorations,decorations,i,2);i+=subDecorations.length-2;}}return decorations;}function PR_splitSourceNodes(source,decorations){for(var i=0;i<decorations.length;i+=2){var style=decorations[i+1];if(style==PR_SOURCE){var start=decorations[i];var end=i+2<decorations.length?decorations[i+2]:source.length;var subDecorations=PR_decorateSource(source.substring(start,end));for(var j=0,m=subDecorations.length;j<m;j+=2){subDecorations[j]+=start;}PR_spliceArrayInto(subDecorations,decorations,i,2);i+=subDecorations.length-2;}}return decorations;}function PR_splitSourceAttributes(source,decorations){var nextValueIsSource=false;for(var i=0;i<decorations.length;i+=2){var style=decorations[i+1];if(style===PR_ATTRIB_NAME){var start=decorations[i];var end=i+2<decorations.length?decorations[i+2]:source.length;nextValueIsSource=/^on|^style$/i.test(source.substring(start,end));}else if(style==PR_ATTRIB_VALUE){if(nextValueIsSource){var start=decorations[i];var end=i+2<decorations.length?decorations[i+2]:source.length;var attribValue=source.substring(start,end);var attribLen=attribValue.length;var quoted=(attribLen>=2&&/^["\']/.test(attribValue)&&attribValue.charAt(0)===attribValue.charAt(attribLen-1));var attribSource;var attribSourceStart;var attribSourceEnd;if(quoted){attribSourceStart=start+1;attribSourceEnd=end-1;attribSource=attribValue;}else{attribSourceStart=start+1;attribSourceEnd=end-1;attribSource=attribValue.substring(1,attribValue.length-1);}var attribSourceDecorations=PR_decorateSource(attribSource);for(var j=0,m=attribSourceDecorations.length;j<m;j+=2){attribSourceDecorations[j]+=attribSourceStart;}if(quoted){attribSourceDecorations.push(attribSourceEnd,PR_ATTRIB_VALUE);PR_spliceArrayInto(attribSourceDecorations,decorations,i+2,0);}else{PR_spliceArrayInto(attribSourceDecorations,decorations,i,2);}}nextValueIsSource=false;}}return decorations;}function PR_decorateSource(sourceCode){var decorations=PR_splitStringAndCommentTokens(sourceCode);decorations=PR_splitNonStringNonCommentTokens(sourceCode,decorations);return decorations;}function PR_decorateMarkup(sourceCode){var decorations=PR_tokenizeMarkup(sourceCode);decorations=PR_splitTagAttributes(sourceCode,decorations);decorations=PR_splitSourceNodes(sourceCode,decorations);decorations=PR_splitSourceAttributes(sourceCode,decorations);return decorations;}function PR_recombineTagsAndDecorations(sourceText,extractedTags,decorations){var html=[];var outputIdx=0;var openDecoration=null;var currentDecoration=null;var tagPos=0;var decPos=0;var tabExpander=PR_tabExpander(PR_TAB_WIDTH);function emitTextUpTo(sourceIdx){if(sourceIdx>outputIdx){if(openDecoration&&openDecoration!==currentDecoration){html.push('</span>');openDecoration=null;}if(!openDecoration&&currentDecoration){openDecoration=currentDecoration;html.push('<span class="',openDecoration,'">');}var htmlChunk=PR_textToHtml(tabExpander(sourceText.substring(outputIdx,sourceIdx))).replace(/(\r\n?|\n| ) /g,'$1&nbsp;').replace(/\r\n?|\n/g,'&nbsp;<br>');html.push(htmlChunk);outputIdx=sourceIdx;}}while(true){var outputTag;if(tagPos<extractedTags.length){if(decPos<decorations.length){outputTag=extractedTags[tagPos]<=decorations[decPos];}else{outputTag=true;}}else{outputTag=false;}if(outputTag){emitTextUpTo(extractedTags[tagPos]);if(openDecoration){html.push('</span>');openDecoration=null;}html.push(extractedTags[tagPos+1]);tagPos+=2;}else if(decPos<decorations.length){emitTextUpTo(decorations[decPos]);currentDecoration=decorations[decPos+1];decPos+=2;}else{break;}}emitTextUpTo(sourceText.length);if(openDecoration){html.push('</span>');}return html.join('');}function prettyPrintOne(sourceCodeHtml){try{var sourceAndExtractedTags=PR_extractTags(sourceCodeHtml);var source=sourceAndExtractedTags.source;var extractedTags=sourceAndExtractedTags.tags;var isMarkup=/^\s*</.test(source)&&/>\s*$/.test(source);var decorations=isMarkup?PR_decorateMarkup(source):PR_decorateSource(source);return PR_recombineTagsAndDecorations(source,extractedTags,decorations);}catch(e){if('console'in window){console.log(e);console.trace();}return sourceCodeHtml;}}var PR_SHOULD_USE_CONTINUATION=true;function prettyPrint(opt_whenDone){var codeSegments=[document.getElementsByTagName('pre'),document.getElementsByTagName('code'),document.getElementsByTagName('xmp')];var elements=[];for(var i=0;i<codeSegments.length;++i){for(var j=0;j<codeSegments[i].length;++j){elements.push(codeSegments[i][j]);}}codeSegments=null;var k=0;function doWork(){var endTime=(PR_SHOULD_USE_CONTINUATION?new Date().getTime()+250:Infinity);for(;k<elements.length&&new Date().getTime()<endTime;k++){var cs=elements[k];if(cs.className&&cs.className.indexOf('prettyprint')>=0){var nested=false;for(var p=cs.parentNode;p!=null;p=p.parentNode){if((p.tagName=='pre'||p.tagName=='code'||p.tagName=='xmp')&&p.className&&p.className.indexOf('prettyprint')>=0){nested=true;break;}}if(!nested){var content=PR_getInnerHtml(cs);content=content.replace(/(?:\r\n?|\n)$/,'');var newContent=prettyPrintOne(content);if(!PR_isRawContent(cs)){cs.innerHTML=newContent;}else{var pre=document.createElement('PRE');for(var i=0;i<cs.attributes.length;++i){var a=cs.attributes[i];if(a.specified){pre.setAttribute(a.name,a.value);}}pre.innerHTML=newContent;cs.parentNode.replaceChild(pre,cs);}}}}if(k<elements.length){setTimeout(doWork,250);}else if(opt_whenDone){opt_whenDone();}}doWork();}</script><script type='text/javascript'>prettyPrint();</script></BODY>
</HTML>
