Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
-
None
-
Operating System: All
Platform: All
-
22121
Description
The "required" validator doesn't work for String[] i.e. using multi-select input
types.
I fixed it locally on my machine, though, so here is what I did if you are
interested:
I changed the org.apache.commons.validator.ValidatorUtil.getValueAsString()
method from:
public static String getValueAsString(Object bean, String property) {
Object value = null;
try
{ value = PropertyUtils.getProperty(bean, property); } catch (Exception e) { log.error(e.getMessage(), e); }return (value != null ? value.toString() : null);
}
to:
public static String getValueAsString(Object bean, String property) {
Object value = null;
try { value = PropertyUtils.getProperty(bean, property); }
catch (Exception e)
{ log.error(e.getMessage(), e); } //Special case, check if String[]
try
{
String[] valueArray = (String[])value;
if(valueArray==null || valueArray.length==0)
}
catch(ClassCastException cce)
return (value != null ? value.toString() : null);
}
I guess, just to be safe the second catch could catch type Exception instead but
that is up to you.
Anyway, it fixed my validation problem for String[] (multi-selects) and doesn't
appear to have broken and validations which worked before.
To sum up the problem and requested enhancement, I am using Struts (but it would
happen the same way with HTML only) to submit an input of type select and
multiple="true" and the validator framework does not detect if nothing is
selected in that case. I traced down to the getValueAsString() method as the
easiest place to add a fix / change so that the least impact could be made.
Above is the code change I made on my local machine to fix "required" type
validation for a multi-select input.