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

CompoundValidator should implement all Behavior methods

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 7.8.0
    • Fix Version/s: 8.0.0-M8, 7.10.0
    • Component/s: wicket
    • Labels:
      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

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

              Dates

              • Created:
                Updated:
                Resolved: