William -

The problem here is that validator is expecting quantityArray to contain a property called quantity for each element it contains. (For example: quantityArray[0].quantity, quantityArray[1].quantity etc.) Since quantityArray is an array of Integer, it obviously does not contain a property called quantity.

Overall though, the problem is that an Integer (and any of the other java type-wrapper classes) does not contain getters and setters for their value properties, and therefore cannot be used in an array and with the built in validator.

I think you have 2 choices here, the first being to use the validate method inside your ActionForm. The second option would be to setup a new class with a quantity property and getters/setters for that property, then make quantityArray an array of that type.

Matt



William Ferguson wrote:
Hi all,

even after scanning the doco, examples, source code and previous posts I
still can't get validation to happen for an indexed field in my Struts
(1.2.4) application working. I would really appreciate some help crafting
the appropriate validation definition.


My form is defined as <form name="/cart/updateItems"> <field property="quantity" indexedListProperty="quantityArray" depends="required, integer"> </field> </form>

A 'quantityArray' parameter is supplied with the Request and is an array of
Integer like Strings.

The Struts ActionForm has the following methods:
  public Integer getQuantity(int index);

  /*
   * NB it is not expected that this method will ever be called,
   * but I think it is needed so that the commons-validator recognises
'quantity' as a property.
   */
  public void setQuantity(int index, Integer quantity);
  public Integer[] getQuantityArray();
  public void setQuantityArray(Integer[] quantity);

But this combination causes the following Exception to be thrown during
validation:
24734  ERROR org.apache.commons.validator.util.ValidatorUtils - Unknown
property 'quantity'
java.lang.NoSuchMethodException: Unknown property 'quantity'
        at
org.apache.commons.beanutils.PropertyUtils.getSimpleProperty(PropertyUtils.j
ava:1175)
        at
org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.j
ava:772)
        at
org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:80
1)
        at
org.apache.commons.validator.util.ValidatorUtils.getValueAsString(ValidatorU
tils.java:105)
        at
org.apache.struts.validator.FieldChecks.validateRequired(FieldChecks.java:87
)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39
)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl
.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at
org.apache.commons.validator.ValidatorAction.executeValidationMethod(Validat
orAction.java:567)
        at
org.apache.commons.validator.Field.validateForRule(Field.java:811)
        at org.apache.commons.validator.Field.validate(Field.java:890)
        at org.apache.commons.validator.Form.validate(Form.java:174)
        at
org.apache.commons.validator.Validator.validate(Validator.java:367)
        at
org.apache.struts.validator.ValidatorForm.validate(ValidatorForm.java:112)

I tried dozens of different combos with no luck.
What do I need to do to validate a collection of properties of unknown size
using the commons-validator?

NB crossposting to both commons and struts lists.

William


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to