Uploaded image for project: 'Wicket'
  1. Wicket
  2. WICKET-6482

CompoundValidator should implement all Behavior methods

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 7.8.0
    • 8.0.0-M8, 7.10.0
    • wicket
    • None

    Description

      Hi,
      I recently had an issue with a CompoundValidator using a StringValidator inside.
      The problem was that the TextField which had the validator assigned did not have a "maxlength" attribute in its HTML representation. Normally StringValidator outputs this attribute automatically when the maximum is not null and the HTML field is of type "input". This is handled in StringValidator.onComponentTag.
      Unfortunately, CompoundValidator does not delegate its own onComponentTag method to the contained validators, so the onComponentTag method of the included StringValidator is never called.

      I think, all Behavior methods should be implemented by CompoundValidator to delegate to the contained validators because this is the expected behavior.
      For onComponentTag it could look like this:

      @Override
      public void onComponentTag(Component component, ComponentTag tag) {
        for (IValidator<T> validator : validators) {
          if (validator instanceof Behavior) {
            Behavior behavior = (Behavior) validator;
            behavior.onComponentTag(component, tag);
          }
        }
      }
      

      Attachments

        Activity

          People

            svenmeier Sven Meier
            svenackermann Sven Ackermann
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: