Details
Description
I have a JSP with a list of fields and I'm using the Validator in combination with Struts for validating the field entries. The current behaviour of the Validator in case of a failed validation is stopping the validation for the whole list of fields. It would be much better, if the validator is processing the list of fields in any case. As a JSP programmer, I am able to show an error message for each wrong field of the list.
This can be fixed with a small change in class Validator.java method validateField. Instead of doing a return statement in the inner loop, just call the break statement, so the outer loop can continue its work.
private void validateField(Field field, ValidatorResults allResults)
throws ValidatorException {
Map actions = resources.getValidatorActions();
if (field.isIndexed()) {
Object oIndexed;
try
catch (Exception e)
{ log.error("in validateField", e); return; }Object indexedList[] = new Object[0];
if (oIndexed instanceof Collection)
{ indexedList = ((Collection) oIndexed).toArray(); }else if (oIndexed.getClass().isArray())
{ indexedList = (Object[]) oIndexed; } for (int pos = 0; pos < indexedList.length; pos++) {
ValidatorResults results = new ValidatorResults();
StringTokenizer st = new StringTokenizer(field.getDepends(),
",");
while (st.hasMoreTokens()) {
String depend = st.nextToken().trim();
ValidatorAction action = (ValidatorAction)
actions.get(depend);
if (action == null)
boolean good =
validateFieldForRule(field, action, results, actions,
pos);
allResults.merge(results);
if (!good)
}
}
Thanks,
Tobias