|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object net.sf.click.control.AbstractControl net.sf.click.control.AbstractContainer net.sf.click.control.Form
Provides a Form control: <form method='post'>.
|
Field
controls
in the order they were added to the form, and then it will process the
Button
controls in the added order. Once all the Fields have been
processed the form will invoke its action listener if defined.
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; } }The forms corresponding template code is below. Note the form automatically renders itself when Velocity invokes its
AbstractContainer.toString()
method.
$form
If a Form has been posted and processed, if it has an error
defined or
any of its Fields have validation errors they will be automatically
rendered, and the isValid()
method will return false.
copyFrom(Object)
copyTo(Object)
// 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);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.
copyTo(Object)
and copyFrom(Object)
also supports
java.util.Map as an argument. Examples of using
java.util.Map are shown in the respective method descriptions.
setValidate(boolean)
to false.
Form validate()
method provides special validation for multipart requests.
Multipart requests are used when uploading files from the client.
The validate()
method checks that files being uploaded do not exceed the
maximum request size
or the maximum file size
.
Please note that if the maximum request size or maximum file size
is exceeded, the request is deemed invalid
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 validate()
for details of the error message properties.
JavaScript Validation
The Form control also supports client side JavaScript validation. By default
JavaScript validation is not enabled. To enable JavaScript validation set
setJavaScriptValidation(boolean)
to true. For example:
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);Please note in that is this example the cancel submit button has
Submit.setCancelJavaScriptValidation(boolean)
set to true. This
prevents JavaScript form validation being performed when the cancel button is
clicked.
<html> <head> $cssImports </head> <body> $form </body> </html> $jsImports
buttonAlign | button alignment: ["left", "center", "right"] |
buttonStyle | button <td> "style" attribute value |
columns | number of form table columns, the default value number is 1 |
errorsAlign | validation error messages alignment: ["left", "center", "right"] |
errorsPosition | validation error messages position: ["top", "middle", "bottom"] |
errorsStyle | errors <td> "style" attribute value |
fieldStyle | field <td> "style" attribute value |
labelAlign | field label alignment: ["left", "center", "right"] |
labelsPosition | label position relative to field: ["left", "top"] |
labelStyle | label <td> "style" attribute value |
click/control.css | control CSS styles, automatically deployed to the click web directory |
/click-control.properties | form and field messages and HTML, located under classpath |
$form.fields
.usernameField
Whenever including your own Form markup in a page template or Velocity macro
always specify:
AbstractControl.name
of the Form startTag()
and endTag()
methods to render this information.
An example of a manually layed out Login form is provided below:
$form.startTag() <table style="margin: 1em;"> #if ($form.error) <tr> <td colspan="2" style="color: red;"> $form.error </td> </tr> #end #if ($form.fields.usernameField.error) <tr> <td colspan="2" style="color: red;"> $form.fields.usernameField.error </td> </tr> #end #if ($form.fields.passwordField.error) <tr> <td colspan="2" style="color: red;"> $form.fields.passwordField.error </td> </tr> #end <tr> <td> Username: </td> <td> $form.fields.usernameField </td> </tr> <tr> <td> Password: </td> <td> $form.fields.passwordField </td> </tr> <tr> <td> $form.fields.okSubmit $form.fields.cancelSubmit </td> </tr> </table> $form.endTag()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.
getFieldList()
and
getButtonList()
properties within a Velocity macro. If you want to
access all Form Controls from within a Velocity template or macro use
AbstractContainer.getControls()
.
The example below provides a generic writeForm()
macro which you could use through out an application. This Velocity macro code
would be contained in a macro file, e.g. macro.vm.
#* Custom Form Macro Code *# #macro( writeForm[$form] ) $form.startTag() <table width="100%"> #if ($form.error) <tr> <td colspan="2" style="color: red;"> $form.error </td> </tr> #end #foreach ($field in $form.fieldList) #if (!$field.hidden) #if (!$field.valid) <tr> <td colspan="2"> $field.error </td> </tr> #end <tr> <td> $field.label: </td><td> $field </td> </tr> #end #end <tr> <td colspan="2"> #foreach ($button in $form.buttonList) $button #end </td> </tr> </table> $form.endTag() #endYou would then call this macro in your Page template passing it your form object:
#writeForm($form)At render time Velocity will execute the macro using the given form and render the results to the response output stream.
onSubmitCheck(net.sf.click.Page, String)
methods. For example:
public class Purchase extends Page { .. public boolean onSecurityCheck() { return form.onSubmitCheck(this, "/invalid-submit.html"); } }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.
See also the W3C HTML reference: FORM
Field
,
Submit
,
Serialized FormField Summary | |
protected String |
actionURL
The form action URL. |
static String |
ALIGN_CENTER
The align center, form layout constant: "center". |
static String |
ALIGN_LEFT
The align left, form layout constant: "left". |
static String |
ALIGN_RIGHT
The align right, form layout constant: "right". |
protected String |
buttonAlign
The button align, default value is "left". |
protected List |
buttonList
The ordered list of button values. |
protected String |
buttonStyle
The button <td> "style" attribute value. |
protected int |
columns
The number of form layout table columns, default value: 1. |
protected int |
defaultFieldSize
The default field size, default value: 0. |
protected boolean |
disabled
The form disabled value. |
protected String |
enctype
The form "enctype" attribute. |
protected String |
error
The form level error message. |
protected String |
errorsAlign
The errors block align, default value is "left". |
protected String |
errorsPosition
The form errors position ["top", "middle", "bottom"] default value: "top". |
protected String |
errorsStyle
The error <td> "style" attribute value. |
protected List |
fieldList
The ordered list of fields, excluding buttons. |
protected String |
fieldStyle
The field <td> "style" attribute value. |
protected Map |
fieldWidths
The map of field width values. |
protected static String |
FOCUS_JAVASCRIPT
The Form set field focus JavaScript. |
static String |
FORM_NAME
The form name parameter for multiple forms: "form_name". |
protected static String |
HTML_IMPORTS
The HTML imports statements. |
protected boolean |
javaScriptValidation
The JavaScript client side form fields validation flag. |
protected String |
labelAlign
The label align, default value is "left". |
protected String |
labelsPosition
The form labels position ["left", "top"] default value: "left". |
protected String |
labelStyle
The label <td> "style" attribute value. |
protected String |
method
The form method ["post, "get"], default value: post. |
static String |
MULTIPART_FORM_DATA
The HTTP content type header for multipart forms. |
static String |
POSITION_BOTTOM
The position bottom, errors on bottom form layout constant: "top". |
static String |
POSITION_LEFT
The position left, labels of left form layout constant: "left". |
static String |
POSITION_MIDDLE
The position middle, errors in middle form layout constant: "middle". |
static String |
POSITION_TOP
The position top, errors and labels form layout constant: "top". |
protected boolean |
readonly
The form is readonly flag. |
static String |
SUBMIT_CHECK
The submit check reserved request parameter prefix: SUBMIT_CHECK_. |
protected boolean |
validate
The form validate fields when processing flag. |
Fields inherited from class net.sf.click.control.AbstractContainer |
controlMap, controls |
Fields inherited from class net.sf.click.control.AbstractControl |
actionListener, attributes, listener, listenerMethod, messages, name, parent, styles |
Fields inherited from interface net.sf.click.Control |
CONTROL_MESSAGES |
Constructor Summary | |
Form()
Create a form with no name. |
|
Form(String name)
Create a form with the given name. |
Method Summary | |
Control |
add(Control control)
Add a Control to the form and return the added instance. |
Control |
add(Control control,
int width)
Add the control to the form and specify the control's width in columns. |
Field |
add(Field field)
Add the field to the form, and set the fields form property. |
Field |
add(Field field,
int width)
Add the field to the form and specify the field's width in columns. |
void |
clearErrors()
Clear any form or field errors by setting them to null. |
void |
clearValues()
Clear all the form field values setting them to null. |
void |
copyFrom(Object object)
Copy the given object's attributes into the Form's field values. |
void |
copyFrom(Object object,
boolean debug)
Copy the given object's attributes into the Form's field values. |
void |
copyTo(Object object)
Copy the Form's field values into the given object's attributes. |
void |
copyTo(Object object,
boolean debug)
Copy the Form's field values into the given object's attributes. |
String |
endTag()
Return the rendered form end tag and JavaScript for field focus and validation. |
String |
getActionURL()
Return the form "action" attribute URL value. |
String |
getButtonAlign()
Return the buttons <td> HTML horizontal alignment: "left", "center", "right". |
List |
getButtonList()
Return the ordered list of Button s. |
String |
getButtonStyle()
Return the button <td> "style" attribute value. |
int |
getColumns()
Return the number of form layout table columns. |
int |
getControlSizeEst()
Return the estimated rendered control size in characters. |
int |
getDefaultFieldSize()
Return the form default field size. |
String |
getEnctype()
Return the form "enctype" attribute value, or null if not defined. |
String |
getError()
Return the form level error message. |
List |
getErrorFields()
Return a list of form fields which are not valid, not hidden and not disabled. |
String |
getErrorsAlign()
Return the errors block HTML horizontal alignment: "left", "center", "right". |
String |
getErrorsPosition()
Return the form errors position ["top", "middle", "bottom"]. |
String |
getErrorsStyle()
Return the error <td> "style" attribute value. |
Field |
getField(String name)
Return the named field if contained in the form or null if not found. |
List |
getFieldList()
Return the ordered list of form fields, excluding buttons. |
Map |
getFields()
Return the Map of form fields (including buttons), keyed on field name. |
String |
getFieldStyle()
Return the field <td> "style" attribute value. |
String |
getFieldValue(String name)
Return the field value for the named field, or null if the field is not found. |
Map |
getFieldWidths()
Return the map of field width values, keyed on field name. |
protected int |
getFormSizeEst(List formFields)
Return the estimated rendered form size in characters. |
String |
getHtmlImports()
Return the HTML head import statements for the CSS stylesheet (click/control.css) and JavaScript (click/control.js) files. |
boolean |
getJavaScriptValidation()
Return true if JavaScript client side form validation is enabled. |
String |
getLabelAlign()
Return the field label HTML horizontal alignment: "left", "center", "right". |
String |
getLabelsPosition()
Return the form labels position ["left", "top"]. |
String |
getLabelStyle()
Return the label <td> "style" attribute value. |
String |
getMethod()
Return the form method ["post" | "get"], default value is post. |
String |
getTag()
Return the form's html tag: form. |
boolean |
getValidate()
Return true if the Form fields should validate themselves when being processed. |
protected boolean |
hasPostError()
Returns true if a POST error occurred, false otherwise. |
Control |
insert(Control control,
int index)
Add the control to the form at the specified index, and return the added instance. |
boolean |
isDisabled()
Return true if the form is a disabled. |
boolean |
isFormSubmission()
Return true if the page request is a submission from this form. |
boolean |
isReadonly()
Return true if the form is a readonly. |
boolean |
isValid()
Return true if the fields are valid and there is no form level error, otherwise return false. |
void |
onDestroy()
Destroy the controls contained in the Form and clear any form error message. |
boolean |
onProcess()
Process the Form and its child controls only if the Form was submitted by the user. |
boolean |
onSubmitCheck(Page page,
Class pageClass)
Perform a form submission check ensuring the user has not replayed the form submission by using the browser back button. |
boolean |
onSubmitCheck(Page page,
Object submitListener,
String submitListenerMethod)
Perform a form submission check ensuring the user has not replayed the form submission by using the browser back button. |
boolean |
onSubmitCheck(Page page,
String redirectPath)
Perform a form submission check ensuring the user has not replayed the form submission by using the browser back button. |
protected boolean |
performSubmitCheck()
Perform a back button submit check, returning true if the request is valid or false otherwise. |
boolean |
remove(Control control)
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. |
boolean |
removeField(String name)
Remove the named field from the form, returning true if removed or false if not found. |
void |
removeFields(List fieldNames)
Remove the list of named fields from the form. |
void |
render(HtmlStringBuffer buffer)
Render the HTML representation of the Form. |
protected void |
renderButtons(HtmlStringBuffer buffer)
Render the given list of Buttons to the string buffer. |
protected void |
renderControls(HtmlStringBuffer buffer,
Container container,
List controls,
Map fieldWidths,
int columns)
Render the specified controls of the container to the string buffer. |
protected void |
renderErrors(HtmlStringBuffer buffer,
boolean processed)
Render the form errors to the given buffer is form processed. |
protected void |
renderFields(HtmlStringBuffer buffer)
Render the non hidden Form Fields to the string buffer. |
protected void |
renderFocusJavaScript(HtmlStringBuffer buffer,
List formFields)
Render the Form field focus JavaScript to the string buffer. |
protected void |
renderHeader(HtmlStringBuffer buffer,
List formFields)
Render the given form start tag and the form hidden fields to the given buffer. |
protected void |
renderTagEnd(List formFields,
HtmlStringBuffer buffer)
Close the form tag and render any additional content after the Form. |
protected void |
renderValidationJavaScript(HtmlStringBuffer buffer,
List formFields)
Render the Form validation JavaScript to the string buffer. |
void |
setActionURL(String value)
Return the form "action" attribute URL value. |
void |
setButtonAlign(String align)
Set the button <td> HTML horizontal alignment: "left", "center", "right". |
void |
setButtonStyle(String value)
Set the button <td> "style" attribute value. |
void |
setColumns(int columns)
Set the number of form layout table columns. |
void |
setDefaultFieldSize(int size)
Return the form default field size. |
void |
setDisabled(boolean disabled)
Set the form disabled flag. |
void |
setEnctype(String enctype)
Set the form "enctype" attribute value. |
void |
setError(String error)
Set the form level validation error message. |
void |
setErrorsAlign(String align)
Set the errors block HTML horizontal alignment: "left", "center", "right". |
void |
setErrorsPosition(String position)
Set the form errors position ["top", "middle", "bottom"]. |
void |
setErrorsStyle(String value)
Set the errors <td> "style" attribute value. |
void |
setFieldStyle(String value)
Set the field <td> "style" attribute value. |
void |
setJavaScriptValidation(boolean validate)
Set the JavaScript client side form validation flag. |
void |
setLabelAlign(String align)
Set the field label HTML horizontal alignment: "left", "center", "right". |
void |
setLabelsPosition(String position)
Set the form labels position ["left", "top"]. |
void |
setLabelStyle(String value)
Set the label <td> "style" attribute value. |
void |
setListener(Object listener,
String method)
The callback listener will only be called during processing if the field value is valid. |
void |
setMethod(String value)
Set the form method ["post" | "get"]. |
void |
setName(String name)
Set the name of the form. |
void |
setReadonly(boolean readonly)
Set the form readonly flag. |
void |
setValidate(boolean validate)
Set the Form field validation flag, telling the Fields to validate themselves when their onProcess() method is invoked. |
String |
startTag()
Return the rendered opening form tag and all the forms hidden fields. |
void |
validate()
Validate the Form request submission. |
Methods inherited from class net.sf.click.control.AbstractContainer |
contains, getControl, getControlMap, getControls, hasControls, onInit, onRender, renderChildren, renderContent, renderTagEnd, toString |
Methods inherited from class net.sf.click.control.AbstractControl |
addStyleClass, appendAttributes, getActionListener, getAttribute, getAttributes, getContext, getId, getMessage, getMessage, getMessage, getMessages, getName, getPage, getParent, getStyle, getStyles, hasAttribute, hasAttributes, hasStyles, onDeploy, registerActionEvent, removeStyleClass, renderTagBegin, setActionListener, setAttribute, setId, setParent, setStyle |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Methods inherited from interface net.sf.click.Control |
getContext, getId, getMessages, getName, getParent, onDeploy, setParent |
Field Detail |
public static final String ALIGN_LEFT
public static final String ALIGN_CENTER
public static final String ALIGN_RIGHT
public static final String POSITION_TOP
public static final String POSITION_MIDDLE
public static final String POSITION_BOTTOM
public static final String POSITION_LEFT
protected static final String FOCUS_JAVASCRIPT
public static final String FORM_NAME
public static final String MULTIPART_FORM_DATA
public static final String SUBMIT_CHECK
protected static final String HTML_IMPORTS
protected String actionURL
protected boolean disabled
protected String enctype
protected String error
protected final List fieldList
protected String method
protected boolean readonly
protected boolean validate
protected String buttonAlign
protected final List buttonList
protected String buttonStyle
protected int columns
protected int defaultFieldSize
protected String errorsAlign
protected String errorsPosition
protected String errorsStyle
protected String fieldStyle
protected Map fieldWidths
protected boolean javaScriptValidation
protected String labelAlign
protected String labelsPosition
protected String labelStyle
Constructor Detail |
public Form(String name)
name
- the name of the form
IllegalArgumentException
- if the form name is nullpublic Form()
Method Detail |
public Control add(Control control)
controlMap
where the key is the Control name and value is the Control instance.
All controls are available on the controls
list
in the order they were added. If you are only interested in Fields,
note that Buttons are available on the buttonList
while other fields are available on fieldList
.
add
in interface Container
add
in class AbstractContainer
control
- the control to add to the container and return
IllegalArgumentException
- if the control is null, the Control name
is not defined or the container already contains a control with the same
nameContainer.add(net.sf.click.Control)
public Control insert(Control control, int index)
controlMap
where the key is the Control name and value is the Control instance.
All controls are available on the controls
list
at the index they were inserted. If you are only interested in Fields,
note that Buttons are available on the buttonList
while other fields are available on fieldList
.
The specified index only applies to controls
, not
buttonList
or fieldList
.
Please note if the specified control already has a parent assigned,
it will automatically be removed from that parent and inserted into the
form.
Also note: Form automatically adds hidden fields to preserve
state across requests. Be aware of this when using insert as the
hidden fields might influence the position of the Control you insert.
This restriction might be removed in a future version of Click.
insert
in interface Container
insert
in class AbstractContainer
control
- the control to add to the containerindex
- the index at which the control is to be inserted
IllegalArgumentException
- if the control is null or if the control
and container is the same instance or the container already contains
a control with the same name or if the Field name is not defined
IndexOutOfBoundsException
- if index is out of range
(index < 0 || index > getControls().size())Container.insert(net.sf.click.Control, int)
public Field add(Field field)
fields
where
the key is the Field name and value is the Field instance.
Buttons are available on the buttonList
while
other fields are available on fieldList
.
field
- the field to add to the form
IllegalArgumentException
- if the field is null, the field name
is not defined or the form already contains a control with the same nameadd(net.sf.click.Control)
public Field add(Field field, int width)
fields
where
the key is the Field name and value is the Field instance.
Fields are available on fieldList
.
Note Button and HiddenField types are not valid arguments for this method.
field
- the field to add to the formwidth
- the width of the field in table columns
IllegalArgumentException
- 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 < 1add(net.sf.click.Control)
public Control add(Control control, int width)
controlMap
where the key is the Control name and value is the Control instance.
Controls are available on the controls
list.
Note Button and HiddenField types are not valid arguments for this method.
control
- the control to add to the formwidth
- the width of the control in table columns
IllegalArgumentException
- if the control is null, control is a
Button or HiddenField, the form already contains a control with the same
name or the width < 1add(net.sf.click.Control)
public boolean remove(Control control)
Container
remove
in interface Container
remove
in class AbstractContainer
control
- the control to remove from the container
IllegalArgumentException
- if the control is nullContainer.remove(net.sf.click.Control)
public boolean removeField(String name)
name
- the name of the field to remove from the form
public void removeFields(List fieldNames)
fieldNames
- the list of field names to remove from the form
IllegalArgumentException
- if any of the fields is nullpublic String getTag()
getTag
in class AbstractControl
AbstractControl.getTag()
public String getActionURL()
public void setActionURL(String value)
value
- the form "action" attribute URL valuepublic int getControlSizeEst()
AbstractControl
getControlSizeEst
in class AbstractContainer
AbstractControl.getControlSizeEst()
public boolean isDisabled()
public void setDisabled(boolean disabled)
disabled
- the form disabled flagpublic String getEnctype()
public void setEnctype(String enctype)
enctype
- the form "enctype" attribute value, or null if not definedpublic String getError()
public void setError(String error)
error
- the validation error messagepublic List getErrorFields()
public Field getField(String name)
name
- the name of the field
IllegalStateException
- if a non-field control is found with the
specified namepublic String getFieldValue(String name)
name
- the name of the field
public String getHtmlImports()
getHtmlImports
in interface Control
getHtmlImports
in class AbstractContainer
Control.getHtmlImports()
public String getMethod()
public void setMethod(String value)
value
- the form methodpublic boolean isFormSubmission()
method
, for example
both must be GET or POST
public void setName(String name)
setName
in interface Control
setName
in class AbstractControl
name
- of the control
IllegalArgumentException
- if the name is nullControl.setName(String)
public boolean isReadonly()
public void setReadonly(boolean readonly)
readonly
- the form readonly flagpublic boolean isValid()
public List getFieldList()
public Map getFields()
AbstractContainer.getControlMap()
public boolean getValidate()
public void setValidate(boolean validate)
validate
- the Form field validation flagpublic String getButtonAlign()
public void setButtonAlign(String align)
align
- the field label HTML horizontal alignmentpublic List getButtonList()
Button
s.
The order of the buttons is the same order they were added to the form.
The returned list includes only buttons added directly to the Form.
Button
s.public String getButtonStyle()
public void setButtonStyle(String value)
value
- the button <td> "style" attribute valuepublic int getColumns()
public void setColumns(int columns)
columns
- the number of form layout table columnspublic int getDefaultFieldSize()
public void setDefaultFieldSize(int size)
size
- the default field sizepublic String getErrorsAlign()
public void setErrorsAlign(String align)
align
- the errors block HTML horizontal alignmentpublic String getErrorsPosition()
public void setErrorsPosition(String position)
position
- the form errors positionpublic String getErrorsStyle()
public void setErrorsStyle(String value)
value
- the errors <td> "style" attribute valuepublic String getFieldStyle()
public void setFieldStyle(String value)
value
- the field <td> "style" attribute valuepublic Map getFieldWidths()
public boolean getJavaScriptValidation()
public void setJavaScriptValidation(boolean validate)
validate
- the JavaScript client side validation flagpublic String getLabelAlign()
public void setLabelAlign(String align)
align
- the field label HTML horizontal alignmentpublic String getLabelsPosition()
public void setLabelsPosition(String position)
position
- the form labels positionpublic String getLabelStyle()
public void setLabelStyle(String value)
value
- the label <td> "style" attribute valuepublic void setListener(Object listener, String method)
setListener
in interface Control
setListener
in class AbstractControl
listener
- the listener object with the named method to invokemethod
- the name of the method to invokeControl.setListener(Object, String)
public void clearErrors()
public void clearValues()
public void copyFrom(Object object)
public void onGet() {
Long customerId = ..
Customer customer = CustomerDAO.findByPK(customerId);
form.copyFrom(customer);
}
copyForm also supports java.util.Map as an argument.
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.
The following example populates the Form fields with a map's
key/value pairs:
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); }For more information on how Fields and Objects are copied see
ContainerUtils.copyObjectToContainer(java.lang.Object, net.sf.click.control.Container)
.
object
- the object to obtain attribute values from
IllegalArgumentException
- if the object parameter is nullpublic void copyFrom(Object object, boolean debug)
object
- the object to obtain attribute values fromdebug
- log debug statements when populating the form
IllegalArgumentException
- if the object parameter is nullcopyFrom(java.lang.Object)
public void copyTo(Object object)
public void onPost() { if (form.isValid()) { Customer customer = new Customer(); form.copyTo(customer); .. } return true; }copyTo also supports java.util.Map as an argument. 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. The following example populates the map with the Form field values:
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); }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
ContainerUtils.copyContainerToObject(net.sf.click.control.Container, java.lang.Object)
.
object
- the object to populate with field values
IllegalArgumentException
- if the object parameter is nullpublic void copyTo(Object object, boolean debug)
object
- the object to populate with field valuesdebug
- log debug statements when populating the object
IllegalArgumentException
- if the object parameter is nullcopyTo(java.lang.Object)
public boolean onProcess()
isFormSubmission()
to check whether the form
was submitted or not.
The Forms processing order is:
Field
controls in the order they were addedButton
controls in the order they were added
onProcess
in interface Control
onProcess
in class AbstractContainer
Context.getRequestParameter(String)
,
Context.getFileItemMap()
public void onDestroy()
onDestroy
in interface Control
onDestroy
in class AbstractContainer
Control.onDestroy()
public void validate()
- /click-control.properties
- file-size-limit-exceeded-error
- post-size-limit-exceeded-error
public boolean onSubmitCheck(Page page, String redirectPath)
public class Order extends Page { .. public boolean onSecurityCheck() { return form.onSubmitCheck(this, "/invalid-submit.html"); } }Form submit checks should generally be combined with the Post-Redirect pattern which provides a better user experience when pages are refreshed. Please note: a call to onSubmitCheck always succeeds for Ajax requests.
page
- the page invoking the Form submit checkredirectPath
- the path to redirect invalid submissions to
IllegalArgumentException
- if the page or redirectPath is nullpublic boolean onSubmitCheck(Page page, Class pageClass)
public class Order extends Page { .. public boolean onSecurityCheck() { return form.onSubmitCheck(this, InvalidSubmitPage.class); } }Form submit checks should generally be combined with the Post-Redirect pattern which provides a better user experience when pages are refreshed. Please note: a call to onSubmitCheck always succeeds for Ajax requests.
page
- the page invoking the Form submit checkpageClass
- the page class to redirect invalid submissions to
IllegalArgumentException
- if the page or pageClass is nullpublic boolean onSubmitCheck(Page page, Object submitListener, String submitListenerMethod)
public class Order extends Page { .. public boolean onSecurityCheck() { return form.onSubmitCheck(this, this, "onInvalidSubmit"); } public boolean onInvalidSubmit() { getContext().setRequestAttribute("invalidPath", getPath()); setForward("invalid-submit.htm"); return false; } }Form submit checks should generally be combined with the Post-Redirect pattern which provides a better user experience when pages are refreshed. Please note: a call to onSubmitCheck always succeeds for Ajax requests.
page
- the page invoking the Form submit checksubmitListener
- the listener object to call when an invalid submit
occurssubmitListenerMethod
- the listener method to invoke when an
invalid submit occurs
IllegalArgumentException
- if the page, submitListener or
submitListenerMethod is nullpublic String startTag()
public String endTag()
public void render(HtmlStringBuffer buffer)
render
in interface Control
render
in class AbstractContainer
buffer
- the specified buffer to render the control's output toAbstractContainer.toString()
protected boolean performSubmitCheck()
protected int getFormSizeEst(List formFields)
formFields
- the list of form fields
protected void renderHeader(HtmlStringBuffer buffer, List formFields)
buffer
- the HTML string buffer to render toformFields
- the list of form fieldsprotected void renderFields(HtmlStringBuffer buffer)
renderControls(HtmlStringBuffer, Container, List, Map, int)
.
buffer
- the StringBuffer to render toprotected void renderControls(HtmlStringBuffer buffer, Container container, List controls, Map fieldWidths, int columns)
buffer
- the StringBuffer to render tocontainer
- the container which controls to rendercontrols
- the controls to renderfieldWidths
- a map of field widths keyed on field namecolumns
- the number of form layout table columnsprotected void renderErrors(HtmlStringBuffer buffer, boolean processed)
buffer
- the string buffer to render the errors toprocessed
- the flag indicating whether has been processedprotected void renderButtons(HtmlStringBuffer buffer)
buffer
- the StringBuffer to render toprotected void renderTagEnd(List formFields, HtmlStringBuffer buffer)
formFields
- all fields contained within the formbuffer
- the buffer to render toprotected void renderFocusJavaScript(HtmlStringBuffer buffer, List formFields)
buffer
- the StringBuffer to render toformFields
- the list of form fieldsprotected void renderValidationJavaScript(HtmlStringBuffer buffer, List formFields)
buffer
- the StringBuffer to render toformFields
- the list of form fieldsprotected boolean hasPostError()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |