Class LazyValidatorForm
- All Implemented Interfaces:
Serializable
,org.apache.commons.beanutils.DynaBean
Struts Lazy ActionForm
which wraps a
LazyDynaBean
.
There isn't really that much to this implementation as most of the
lazy behaviour is in LazyDynaBean
and wrapping
the LazyDynaBean
is handled in the parent
BeanValidatorForm
. The only thing it really does is populate
indexed properties which are a List
type with a
LazyDynaBean
in the
get(name, index)
method.
Lazy DynaBeans provide several types of lazy behaviour:
- lazy property addition - properties which do not exist are automatically added.
- lazy List facilities - automatically grows a
List
orArray
to accomodate the index value being set. - lazy List creation - automatic creation of a
List
orArray
for indexed properties, if it doesn't exist. - lazy Map creation - automatic
creation of a
Map
for mapped properties, if it doesn't exist.
Using this lazy ActionForm
means that you don't have
to define the ActionForm's properties in the struts-config.xml
.
However, a word of warning, everything in the Request gets populated into
this ActionForm
circumventing the normal firewall
function of Struts forms. Therefore you should only take out of this
form properties you expect to be there rather than blindly populating all
the properties into the business tier.
Having said that it is not necessary to pre-define properties in the
struts-config.xml
, it is useful to sometimes do so for
mapped or indexed properties. For example, if you want to use
a different Map
implementation from the default
HashMap
or an array for indexed properties, rather than the
default List
type:
<form-bean name="myForm" type="org.apache.struts.validator.LazyValidatorForm">
<form-property name="myMap" type="java.util.TreeMap" />
<form-property name="myBeans" type="org.apache.commons.beanutils.LazyDynaBean[]"
/>
</form-bean>
Another reason for defining indexed properties in the
struts-config.xml
is that if you are validating indexed
properties using the Validator and none are submitted then the indexed
property will be null
which causes validator to fail.
Pre-defining them in the struts-config.xml
will result in a
zero-length indexed property (array or List) being instantiated, avoiding
an issue with validator in that circumstance.
This implementation validates using the ActionForm name. If you require a version that validates according to the path then it can be easily created in the following manner:
public class MyLazyForm extends LazyValidatorForm {
public MyLazyForm () {
super();
setPathValidation(true);
}
}
Rather than using this class, another alternative is to either use a
LazyDynaBean
or custom version of LazyDynaBean
directly. Struts now automatically wraps objects which are not
ActionForms
in a BeanValidatorForm
. For
example:
<form-bean name="myForm" type="org.apache.commons.beanutils.LazyDynaBean">
<form-property name="myBeans" type="org.apache.commons.beanutils.LazyDynaBean[]"
/>
</form-bean>
- Since:
- Struts 1.2.6
- Version:
- $Rev$ $Date: 2005-05-07 12:11:38 -0400 (Sat, 07 May 2005) $
- See Also:
-
Field Summary
Fields inherited from class org.apache.struts.validator.BeanValidatorForm
dynaBean, pathValidation
Fields inherited from class org.apache.struts.validator.ValidatorForm
page, validatorResults
Fields inherited from class org.apache.struts.action.ActionForm
multipartRequestHandler, servlet
-
Constructor Summary
ConstructorDescriptionDefault Constructor which creates aLazyDynaBean
to back this form.LazyValidatorForm
(org.apache.commons.beanutils.DynaBean bean) -
Method Summary
Modifier and TypeMethodDescriptionReturn an indexed property value.getMap()
Return theMap
containing the property values.protected org.apache.commons.beanutils.DynaBean
newIndexedBean
(String name) Creates newDynaBean
instances to populate an 'indexed' property of beans - defaults toLazyDynaBean
type.Methods inherited from class org.apache.struts.validator.BeanValidatorForm
contains, get, get, getDynaBean, getDynaClass, getInstance, getStrutsConfigFormName, getValidationKey, initialize, isPathValidation, remove, set, set, set, setPathValidation, size
Methods inherited from class org.apache.struts.validator.ValidatorForm
determinePage, getPage, getResultValueMap, getValidatorResults, reset, setPage, setValidatorResults, validate
Methods inherited from class org.apache.struts.action.ActionForm
getMultipartRequestHandler, getServlet, getServletWrapper, reset, setMultipartRequestHandler, setServlet, validate
-
Constructor Details
-
LazyValidatorForm
public LazyValidatorForm()Default Constructor which creates aLazyDynaBean
to back this form. -
LazyValidatorForm
public LazyValidatorForm(org.apache.commons.beanutils.DynaBean bean)
-
-
Method Details
-
get
Return an indexed property value.
If the "indexed" property is a
List
type then any missing values are populated with a bean (created in thenewIndexedBean(name)
method - in this implementation this is aLazyDynaBean
type.- Specified by:
get
in interfaceorg.apache.commons.beanutils.DynaBean
- Overrides:
get
in classBeanValidatorForm
- Parameters:
name
- Name of the property whose value is to be retrievedindex
- Index of the value to be retrieved
-
getMap
Return the
Map
containing the property values.Provided so that properties can be access using JSTL.
-
newIndexedBean
Creates new
DynaBean
instances to populate an 'indexed' property of beans - defaults toLazyDynaBean
type.Override this method if you require a different type of
DynaBean
.
-