Uploaded image for project: 'Struts 1'
  1. Struts 1
  2. STR-2971

one of validator.Resources.getActionMessage method does not respect message's "bundle" attribute

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 1.2.9
    • 1.3.6
    • Core
    • None
    • Struts 1.2.9, commons-validator 1.1.4

    Description

      I have a custom validator that uses the currently-loged-in user's date format preferences to validate date input. I use the following code to return error messages when there is a problem:

      if(error)

      { errors.add(field.getKey(), Resources.getActionMessage(request, va, field)); return Boolean.FALSE; }

      The variables 'field' (commons.validator.Field), 'request', (HttpServletRequest) and 'va' (commons.validator.ValidatorAction) are all passed-in as parameters to this method, similar to other validateFoo(...) methods/classes.

      I recently separated my application resources (strings) into separate files based upon user role, to help manage the avalance of strings I had to deal with. I added a "bundle" attribute to my <msg> elements in my validation configuration file. This works for all of the stock validators, but not mine. I checked to see what the difference was between my code and the validators defined in struts.validator.FieldChecks, and they use this:

      errors.add(field.getKey(),
      Resources.getActionMessage(validator, request, va, field));

      Note the addition of that first parameter. I checked the code for these two different methods in the Resources class, and it appears that the latter will use the bundle attribute and get the appropriate message resource.

      I'm happy to change my code to use this other method – it's no sweat to make that change. But I was suprised to see that this particular variety of the getActionMessage method did not respect the bundle setting, and also did not document that behavior.

      The "working" method uses the ValidatorAction parameter (missing in the method in question) to get the ServletContext where the MessageResources objects can be located. Since the HttpServletRequest is available in the "non-working" method, I believe this can still be achieved.

      Perhaps this "non-working" method should be deprecated in favor of the second method? Or, is there some historical reason why it needs to exist, and exhibit this behavior?

      Attachments

        Activity

          People

            niallp Niall Pemberton
            chris@christopherschultz.net Christopher Schultz
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: