Uploaded image for project: 'Tapestry 5'
  1. Tapestry 5
  2. TAP5-1895

ValidationDecorator.insideLabel(...) is called after the removal of PropertyContext in PropertyEditor

    XMLWordPrintableJSON

Details

    Description

      I want to add css class to label if field is required in my custom ValidationDecorator:

      @Override
      public void insideLabel(Field field, Element labelElement) {

      if(field == null) return;

      if(field.isRequired())

      { labelElement.addClassName("required-label"); }

      if(inError(field))

      { labelElement.addClassName(CSSClassConstants.ERROR); }

      }

      It does not work with BeanEditForm component. The problem arises because method ValidationDecorator.insideLabel(...) is called in Label component after removal of PropertyContext from Environment (PropertyContext is needed for get the validator and call isRequired() method):

      @HeartbeatDeferred
      private void updateAttributes()

      { String fieldId = field.getClientId(); labelElement.forceAttributes("for", fieldId); decorator.insideLabel(field, labelElement); }

      The solution for this problem would be to move the call to decorator.insideLabel (field, labelElement) to the beginRender method in Label component. Label decorating does not need to wait for rendering field element and only needs a label element.

      Attachments

        1. TAP5-1895.patch
          0.7 kB
          Vladimir Velikiy

        Activity

          People

            hlship Howard Lewis Ship
            vvv Vladimir Velikiy
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: