You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by bu...@apache.org on 2003/08/01 13:02:12 UTC

DO NOT REPLY [Bug 22046] New: - field validation for a list of fields

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22046>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22046

field validation for a list of fields

           Summary: field validation for a list of fields
           Product: Commons
           Version: unspecified
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Validator
        AssignedTo: commons-dev@jakarta.apache.org
        ReportedBy: Jovovich@gmx.net


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