Commons Validator
  1. Commons Validator
  2. VALIDATOR-149

required validator doesn't work with String[] (multi-selects)

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.1.0 (alpha)
    • Component/s: None
    • Labels:
      None
    • Environment:

      Operating System: All
      Platform: All

      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)

      { value = null; }

      }
      catch(ClassCastException cce)

      { //Then it wasn't a String[] }

      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.

        Activity

          People

          • Assignee:
            Unassigned
            Reporter:
            shane
          • Votes:
            1 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development