Uploaded image for project: 'Commons Validator'
  1. Commons Validator
  2. VALIDATOR-169

Field validation for a list of fields

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Abandoned
    • None
    • 2.0
    • Framework
    • None
    • Operating System: other
      Platform: Other

    • 22046

    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

      { oIndexed = PropertyUtils.getProperty( hResources.get(BEAN_KEY), field.getIndexedListProperty()); }

      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)

      { log.error( "No ValidatorAction called " + depend + " found for field " + field.getProperty()); return; }

      boolean good =
      validateFieldForRule(field, action, results, actions,
      pos);
      allResults.merge(results);
      if (!good)

      { break; }

      }
      }

      Thanks,
      Tobias

      Attachments

        1. ASF.LICENSE.NOT.GRANTED--patch.txt
          15 kB
          Steve Clementi

        Activity

          People

            Unassigned Unassigned
            jovovich@gmx.net Jovovich
            Votes:
            2 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: