|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.apache.struts.action.ActionForm
org.apache.struts.validator.ValidatorForm
org.apache.struts.validator.BeanValidatorForm
org.apache.struts.validator.LazyValidatorForm
public class LazyValidatorForm
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:
List or Array to accomodate the index value being
set.List or Array for indexed properties, if
it doesn't exist.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>
| Field Summary |
|---|
| Fields inherited from class org.apache.struts.validator.BeanValidatorForm |
|---|
dynaBean, logger, 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 | |
|---|---|
LazyValidatorForm()
Default Constructor which creates a LazyDynaBean to
back this form. |
|
LazyValidatorForm(org.apache.commons.beanutils.DynaBean bean)
|
|
| Method Summary | |
|---|---|
java.lang.Object |
get(java.lang.String name,
int index)
Return an indexed property value. |
java.util.Map |
getMap()
Return the Map containing the property values. |
protected org.apache.commons.beanutils.DynaBean |
newIndexedBean(java.lang.String name)
Creates new DynaBean instances to populate an 'indexed'
property of beans - defaults to LazyDynaBean 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 |
|---|
getPage, getResultValueMap, getValidatorResults, reset, setPage, setValidatorResults, validate |
| Methods inherited from class org.apache.struts.action.ActionForm |
|---|
getMultipartRequestHandler, getServlet, getServletWrapper, reset, setMultipartRequestHandler, setServlet, validate |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public LazyValidatorForm()
LazyDynaBean to
back this form.
public LazyValidatorForm(org.apache.commons.beanutils.DynaBean bean)
| Method Detail |
|---|
public java.lang.Object get(java.lang.String name,
int index)
Return an indexed property value.
If the "indexed" property is a List type then any
missing values are populated with a bean (created in the
newIndexedBean(name) method - in this implementation this
is a LazyDynaBean type.
get in interface org.apache.commons.beanutils.DynaBeanget in class BeanValidatorFormname - Name of the property whose value is to be retrievedindex - Index of the value to be retrievedpublic java.util.Map getMap()
Return the Map containing the property values.
Provided so that properties can be access using JSTL.
protected org.apache.commons.beanutils.DynaBean newIndexedBean(java.lang.String name)
Creates new DynaBean instances to populate an 'indexed'
property of beans - defaults to LazyDynaBean type.
Override this method if you require a different type of
DynaBean.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||