Interface FormBuilder
- All Superinterfaces:
Cloneable
- All Known Implementing Classes:
AbstractFormBuilder
,FormBuilderHtml
,FormBuilderXml
All the fields in a form can be generated at once by using the
generateForm
methods, or individual fields can be generated
through the generateField
method. It's also possible to remove
the form generation for all the fields or for one field in particular
through the removeForm
and removeField
methods.
When generating a form of a Validated
bean instance, and
associated ValidationBuilder
will be used to also generate the
validation errors and markings.
The form building works with a Template
instance that it will
analyze for the presence of certain values. The names of these will be in
the following format: form:prefix:name
where
form:prefix:
identifies which type of field has to be generated
and name
indicates the name of the property for which the form
field will be generated.
The form builder will generally use the constraints on the bean property to generate the form field with the appropriate metadata information. Many times it's appropriate to add custom information to the form fields. This can be done by providing text in between the form field value begin and end tags. For example, for the HTML form builder you can provide custom CSS style information:
<!--v form:input:firstname-->style="border: 1px solid black;"<!--/v-->If the custom attributes are dynamic and contain value tags, then you should use a dedicated block template tag that has an
attributes:
middle part, for example:
<!--v form:input:firstname/--> <!--b form:input:attributes:firstname-->style="border: 1px solid {{v color/}};"<!--/b-->
By default, the generation of the form fields only includes the field
itself. You can however customize this by specifying a block tag that has
the same name as the value tag that will be filled in with the generated
form field. This bock tag supports the following value tags:
form:label
, form:name
, form:value
and
form:field
. If one of these is present, it will be replaced
respectively with: the label of the form field, the name of the property,
the current value of the property, and the generated form fields.
For example:
<!--b form:input:firstname--> <!--v form:name/-->-<!--v form:value/--> : <!--v form:field/--> <!--/b-->could be rendered like this with the HTML form builder:
firstname-John : <input type="text" name="firstname" />
Additional template values are available for collection field, please
look at selectParameter(rife.template.Template, java.lang.String, java.lang.String[])
for more information.
- Since:
- 1.0
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Template value tags with theform:field
name will be replaced by the actual generated form field if they are present inside block tags that have the same name as the template value that will contain the generated form field.static final String
Template value tags with theform:label
name will be replaced by the label if they are present inside block tags that have the same name as the template value that will contain the generated form field.static final String
Template value tags with theform:name
name will be replaced by the field name if they are present inside block tags that have the same name as the template value that will contain the generated form field.static final String
Template value tags with theform:value
name will be replaced by the current field value if they are present inside block tags that have the same name as the template value that will contain the generated form field.static final String
A template block with anATTRIBUTES
middle part after the standard form field prefix, allows for dynamic custom attributes specifications for the form field generation.static final String
Template values that start withform:checkbox:
will generate a checkbox group for the property name that follows the prefix.static final String
Template values that start withform:display:
will not actually generate a form field but simply display the current value as text.static final String
Template values that start withform:hidden:
will generate a hidden form field for the property name that follows the prefix.static final String
Template values that start withform:input:
will generate a text input form field for the property name that follows the prefix.static final String
Template blocks that start withform:label:
provide a textual label for a specific value for a property name.static final String
Template values that start withform:radio:
will generate a radio button group for the property name that follows the prefix.static final String
Template values that start withform:secret:
will generate a password input form field for the property name that follows the prefix.static final String
Template values that start withform:select:
will generate a select list for the property name that follows the prefix.static final String
Template values that start withform:textarea:
will generate a multi-line text form field for the property name that follows the prefix.static final String
static final String
static final String
static final String
-
Method Summary
Modifier and TypeMethodDescriptionclone()
Generates a form field for one particular property name.generateField
(Template template, Class propertyType, ConstrainedProperty property, String[] values, String prefix) Generates a form field for one particular property.generateField
(Template template, String name, String[] values, String prefix) Generates a form field for one particular property name.generateField
(Template template, ConstrainedProperty property, String[] values, String prefix) Generates a form field for one particular property.Generates all the form fields for a bean class.Generates all the form fields for a bean instance.Returns theValidationBuilder
that is used by thisFormBuilder
.void
removeField
(Template template, String templateFieldName) Removes the content of the template value that would otherwise be filled in with a generated form field through areplaceField(rife.template.Template, java.lang.String, rife.validation.ConstrainedProperty, java.lang.String[], java.lang.String)
method.void
removeField
(Template template, String name, String prefix) Removes the content of the template value that would otherwise be filled in with a generated form field through agenerateField(rife.template.Template, rife.validation.ConstrainedProperty, java.lang.String[], java.lang.String)
method.void
removeForm
(Template template, Class beanClass, String prefix) Removes the content of all the template values that would otherwise be filled in with generated form fields through thegenerateForm(Template, Class, Map, String)
method.replaceField
(Template template, String templateFieldName, Class propertyType, String name, String[] values, String prefix) Generates a form field for one particular property name and always replace the content of the template values that match the auto-generation name format.replaceField
(Template template, String templateFieldName, Class propertyType, ConstrainedProperty property, String[] values, String prefix) Generates a form field for one particular property and always replace the content of the template values that match the auto-generation name format.replaceField
(Template template, String templateFieldName, String name, String[] values, String prefix) Generates a form field for one particular property name and always replace the content of the template values that match the auto-generation name format.replaceField
(Template template, String templateFieldName, ConstrainedProperty property, String[] values, String prefix) Generates a form field for one particular property and always replace the content of the template values that match the auto-generation name format.selectParameter
(Template template, String name, String[] values) Generates the required attributes so that an existing form field indicates its checked or selected status.void
unselectParameter
(Template template, String name, String[] values) Removes the generated attributes that indicate that an existing form field is checked or selected
-
Field Details
-
PREFIX_FORM_HIDDEN
Template values that start withform:hidden:
will generate a hidden form field for the property name that follows the prefix.- Since:
- 1.0
- See Also:
-
PREFIX_FORM_INPUT
Template values that start withform:input:
will generate a text input form field for the property name that follows the prefix. The maximum length of the allowed text will be obtained from themaxLength
constraint.- Since:
- 1.0
- See Also:
-
PREFIX_FORM_SECRET
Template values that start withform:secret:
will generate a password input form field for the property name that follows the prefix. The maximum length of the allowed text will be obtained from themaxLength
constraint.- Since:
- 1.0
- See Also:
-
PREFIX_FORM_TEXTAREA
Template values that start withform:textarea:
will generate a multi-line text form field for the property name that follows the prefix.- Since:
- 1.0
- See Also:
-
PREFIX_FORM_RADIO
Template values that start withform:radio:
will generate a radio button group for the property name that follows the prefix. The possible radio button values will be obtained from theinList
constraint,- Since:
- 1.0
- See Also:
-
PREFIX_FORM_CHECKBOX
Template values that start withform:checkbox:
will generate a checkbox group for the property name that follows the prefix. The possible checkbox values will be obtained from theinList
constraint,- Since:
- 1.0
- See Also:
-
PREFIX_FORM_SELECT
Template values that start withform:select:
will generate a select list for the property name that follows the prefix. The possible select list options will be obtained from theinList
constraint,- Since:
- 1.0
- See Also:
-
PREFIX_FORM_DISPLAY
Template values that start withform:display:
will not actually generate a form field but simply display the current value as text.- Since:
- 1.0
- See Also:
-
PREFIX_FORM_LABEL
Template blocks that start withform:label:
provide a textual label for a specific value for a property name. The format after the prefix ispropertyname:propertyvalue
.For example:
<!--b form:label:options:1-->the first option<!--/b--> <!--b form:label:options:2-->the second option<!--/b-->
- Since:
- 1.0
- See Also:
-
MIDDLE_ATTRIBUTES
A template block with anATTRIBUTES
middle part after the standard form field prefix, allows for dynamic custom attributes specifications for the form field generation.- Since:
- 1.0
- See Also:
-
ID_FORM_LABEL
Template value tags with theform:label
name will be replaced by the label if they are present inside block tags that have the same name as the template value that will contain the generated form field. (More information in theFormBuilder
interface Javadocs)- Since:
- 1.0
- See Also:
-
ID_FORM_FIELD
Template value tags with theform:field
name will be replaced by the actual generated form field if they are present inside block tags that have the same name as the template value that will contain the generated form field. (More information in theFormBuilder
interface Javadocs)- Since:
- 1.0
- See Also:
-
ID_FORM_NAME
Template value tags with theform:name
name will be replaced by the field name if they are present inside block tags that have the same name as the template value that will contain the generated form field. (More information in theFormBuilder
interface Javadocs)- Since:
- 1.0
- See Also:
-
ID_FORM_VALUE
Template value tags with theform:value
name will be replaced by the current field value if they are present inside block tags that have the same name as the template value that will contain the generated form field. (More information in theFormBuilder
interface Javadocs)- Since:
- 1.0
- See Also:
-
SUFFIX_SELECTED
- See Also:
-
SUFFIX_CHECKED
- See Also:
-
TAG_SELECTED
- See Also:
-
TAG_CHECKED
- See Also:
-
-
Method Details
-
generateForm
Collection<String> generateForm(Template template, Class beanClass, Map<String, String[]> values, String prefix) throws BeanUtilsExceptionGenerates all the form fields for a bean class.If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.
- Parameters:
template
- the template instance that will be used for the form generationbeanClass
- the bean class whose properties will be analyzed for the form generationvalues
- a map of name-value pairs that indicate the currently active context for the form that will be generated, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form fields with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Throws:
BeanUtilsException
- when errors occurred during the form generation- Since:
- 1.0
-
generateForm
Collection<String> generateForm(Template template, Object bean, Map<String, String[]> values, String prefix) throws BeanUtilsExceptionGenerates all the form fields for a bean instance.If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.
- Parameters:
template
- the template instance that will be used for the form generationbean
- the bean instance whose properties and validation errors will be analyzed for the form generationvalues
- a map of name-value pairs that indicate the currently active context for the form that will be generated, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form fields with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Throws:
BeanUtilsException
- when errors occurred during the form generation- Since:
- 1.0
-
generateField
Collection<String> generateField(Template template, ConstrainedProperty property, String[] values, String prefix) Generates a form field for one particular property.If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.
- Parameters:
template
- the template instance that will be used for the form generationproperty
- the constrained property that the form field will be generated forvalues
- the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Since:
- 1.0
-
generateField
Collection<String> generateField(Template template, Class propertyType, ConstrainedProperty property, String[] values, String prefix) Generates a form field for one particular property.If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.
- Parameters:
template
- the template instance that will be used for the form generationpropertyType
- the type of the propertyproperty
- the constrained property that the form field will be generated forvalues
- the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Since:
- 1.0
-
generateField
Generates a form field for one particular property name.If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.
- Parameters:
template
- the template instance that will be used for the form generationname
- the name of the property that the form field will be generated forvalues
- the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Since:
- 1.0
-
generateField
Collection<String> generateField(Template template, Class propertyType, String name, String[] values, String prefix) Generates a form field for one particular property name.If content has already been filled in for any of the template values that are normally replaced with generated form fields, no generation will happen for those and the existing content will simply remain present.
- Parameters:
template
- the template instance that will be used for the form generationpropertyType
- the type of the propertyname
- the name of the property that the form field will be generated forvalues
- the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Since:
- 1.0
-
replaceField
Collection<String> replaceField(Template template, String templateFieldName, ConstrainedProperty property, String[] values, String prefix) Generates a form field for one particular property and always replace the content of the template values that match the auto-generation name format.This method also adds a
templateFieldName
parameter. It allows you to use another property name for the template values than the one of the actual bean property. You will typically use this when you dynamically generate a form and iterate over the generation of certain fields. So, for example, when you have properties namedanswer1
andanswer2
, you can use this template snippet:<!--v answers/--> <!--b answer--> <!--v form:input:answer/--> <!--/b-->
By using thereplaceField(template, "answer", property, null, null)
method call for each answer property and appending theanswer
block to theanswers
value, you can benefit from the automatic form field generation but still dynamically aggregate the results into one area.- Parameters:
template
- the template instance that will be used for the form generationtemplateFieldName
- the name of the form field that will be used to look for supported value tags in the property templateproperty
- the constrained property that the form field will be generated forvalues
- the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Since:
- 1.0
-
replaceField
Collection<String> replaceField(Template template, String templateFieldName, Class propertyType, ConstrainedProperty property, String[] values, String prefix) Generates a form field for one particular property and always replace the content of the template values that match the auto-generation name format.The documentation of the
previous replaceField method
contains more information about the functionality of this method.- Parameters:
template
- the template instance that will be used for the form generationtemplateFieldName
- the name of the form field that will be used to look for supported value tags in the property templatepropertyType
- the type of the propertyproperty
- the constrained property that the form field will be generated forvalues
- the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Since:
- 1.0
-
replaceField
Collection<String> replaceField(Template template, String templateFieldName, String name, String[] values, String prefix) Generates a form field for one particular property name and always replace the content of the template values that match the auto-generation name format.The documentation of the
previous replaceField method
contains more information about the functionality of this method.- Parameters:
template
- the template instance that will be used for the form generationtemplateFieldName
- the name of the form field that will be used to look for supported value tags in the property templatename
- the name of the property that the form field will be generated forvalues
- the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Since:
- 1.0
- See Also:
-
replaceField
Collection<String> replaceField(Template template, String templateFieldName, Class propertyType, String name, String[] values, String prefix) Generates a form field for one particular property name and always replace the content of the template values that match the auto-generation name format.The documentation of the
previous replaceField method
contains more information about the functionality of this method.- Parameters:
template
- the template instance that will be used for the form generationtemplateFieldName
- the name of the form field that will be used to look for supported value tags in the property templatepropertyType
- the type of the propertyname
- the name of the property that the form field will be generated forvalues
- the current values of the property, these are typically the values that have been submitted previously through a web page. The values will be used to pre-populate the form field with content.prefix
- the prefix of the bean property names that should be used while generating the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Returns:
- the collection of template value names that have been generated
- Since:
- 1.0
- See Also:
-
removeForm
Removes the content of all the template values that would otherwise be filled in with generated form fields through thegenerateForm(Template, Class, Map, String)
method.- Parameters:
template
- the template instance whose values will be clearedbeanClass
- the bean class whose properties will be analyzed for clearing the form field valuesprefix
- the prefix of the bean property names that should be used while clearing the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Throws:
BeanUtilsException
- when errors occurred during the clearing of the form- Since:
- 1.0
- See Also:
-
removeField
Removes the content of the template value that would otherwise be filled in with a generated form field through agenerateField(rife.template.Template, rife.validation.ConstrainedProperty, java.lang.String[], java.lang.String)
method.- Parameters:
template
- the template instance whose values will be clearedname
- the name of the property for which the template value will be clearedprefix
- the prefix of the bean property names that should be used while clearing the form, this is handy to use when the several forms are present that use the same bean class or that has overlapping property names- Since:
- 1.0
- See Also:
-
removeField
Removes the content of the template value that would otherwise be filled in with a generated form field through areplaceField(rife.template.Template, java.lang.String, rife.validation.ConstrainedProperty, java.lang.String[], java.lang.String)
method.- Parameters:
template
- the template instance whose values will be clearedtemplateFieldName
- the that is use in the template values to identify the property that has to be cleared- Since:
- 1.0
- See Also:
-
selectParameter
Generates the required attributes so that an existing form field indicates its checked or selected status.This method will check the template for certain value tags and set them to the correct attributes according to the name and the provided values in this method. This is dependent on the template type and currently only makes sense for
html
templates.For example for select boxes, consider the name '
colors
', the values 'blue
' and 'red
', and the following HTML template excerpt:<select name="colors"> <option value="blue"{{v colors:blue:selected}}{{/v}}>Blue</option> <option value="orange"{{v colors:orange:selected}}{{/v}}>Orange</option> <option value="red"{{v colors:red:selected}}{{/v}}>Red</option> <option value="green"{{v colors:green:selected'}}{{/v}}>Green</option> </select>
the result will then be:
<select name="colors"> <option value="blue" selected="selected">Blue</option> <option value="orange">Orange</option> <option value="red" selected="selected">Red</option> <option value="green">Green</option> </select>
For example for radio buttons, consider the name '
size
', the value 'large
' and the following HTML template excerpt:<input type="radio" name="size" value="large"{{v size:large:checked}}{{/v}} /> <input type="radio" name="size" value="small"{{v size:small:checked}}{{/v}} />
the result will then be:
<input type="radio" name="size" value="large" checked="checked" /> <input type="radio" name="size" value="small" />
For example for checkboxes, consider the name '
active
', the value 'true
' and the following HTML template excerpt:<input type="checkbox" name="active"{{v active:checked}}{{/v}} /> <input type="checkbox" name="senditnow"{{v senditnow:checked}}{{/v}} />
the result will then be:
<input type="checkbox" name="active" checked="checked" /> <input type="checkbox" name="senditnow" />
- Parameters:
template
- the template instance that will be used for the generationname
- the name of the parametervalues
- the values of the parameter- Returns:
- the collection of template value names that have been generated
-
unselectParameter
Removes the generated attributes that indicate that an existing form field is checked or selected- Parameters:
template
- the template instance that will be used for the clearingname
- the name of the parametervalues
- the values of the parameter
-
getValidationBuilder
ValidationBuilder getValidationBuilder()Returns theValidationBuilder
that is used by thisFormBuilder
.- Returns:
- this
FormBuilder
'sValidationBuilder
- Since:
- 1.0
-
clone
Object clone()
-