Uploaded image for project: 'Struts 2'
  1. Struts 2
  2. WW-4167

Unable to create a custom validator inheriting IntRangeFieldValidator

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 2.3.15.1
    • 2.3.20
    • XML Validators
    • None
    • Windows 7 64bit, Java Runtime Environment 7, Tomcat 7
      CentOS 5 32bit, Java Runtime Environment 6, Tomcat 6

    Description

      I created a custom struts validator class which inherits IntRangeFieldValidator, but a runtime error occurs when checking a input value with the validator.
      When I examined the internal data with a debugger, properties "min" and "max" of the custom class were stored as Strings, not Integers.

      Parameters "min" and "max" are read from [ActionName]-validation.xml, converted to Integers, and set to the properties of a validator instance using OGNL.
      But the conversion to Integers is skipped for a derived class of IntRangeFieldValidator.
      The cause seems to be a bug in OGNL library. See https://issues.apache.org/jira/browse/OGNL-238.
      Methods setMin and setMax's argument types are the type parameter T in AbstractRangeValidator<T>.
      OGNL library handles the type parameter for a directly derived class of a generic class, but not for an indirectly derived one.

      A workaround is to override all getters and setters with a parameterized class in a custom validator class without using a type parameter.
      That is, when I define a class which extends IntRangeFieldValidator, I have to also define methods "Integer getMin()", "void setMin(Integer min)", "Integer getMax()" and "void setMax(Integer max)" in the class.

      Attachments

        Activity

          People

            lukaszlenart Lukasz Lenart
            recyclebin5385@yahoo.co.jp recyclebin5385
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: