Tapestry 5
  1. Tapestry 5
  2. TAP5-1718

Tapestry-beanvalidator isn't validating nested DTO objects / Doesn't mark the invalid fields in the UI

    Details

      Description

      Tapestry-beanvalidator isn't validating nested objects correctly, the problem is that component parameters i.e. the TextField#value is only bound to the attribute itself but doesn't contain the full objectpath, so using a DTO like:

      class TestDTO

      { @NotNull private String firstName; @Valid private EmbeddedObject embeddedObject; ... }

      class EmbeddedObject

      { @NotNull private String lastName; ... }

      Using the TestDTO on a page in the following way:
      class MyPage{
      ...
      @Property
      private TestDTO testDTO;

      @Component(parameters =

      {"validate=testDTO"}

      )
      private Form form;

      @Component(parameters =

      {"value=testDTO.firstName"}

      )
      private TextField firstName;

      @Component(parameters =

      {"value=testDTO.embeddedObject.lastName"}

      )
      private TextField embeddedField;
      ...
      }

      Submitting the form validates all the attributes correctly (also the embedded object validation error is listed in the t:errors component) but when it comes to BeanFieldValidator only lastName is on the Environment Stack in the BeanValidationContext. As TestDTO doesn't contain the property lastName and there's no objectpath available it doesn't traverse down the objects and can't assign the correct validation error.
      The outcome is that even the property is validated correctly, there's no red-frame (css error class) on the appropriate field in the UI.

      For reference: http://tapestry.1045711.n5.nabble.com/tapestry-beanvalidation-td4921787.html

        Activity

        Matthias Melitzer created issue -
        Matthias Melitzer made changes -
        Field Original Value New Value
        Description Tapestry-beanvalidator isn't validating nested objects correctly, the problem is that component parameters i.e. the TextField#value is only bound to the attribute itself but doesn't contain the full objectpath, so using a DTO like:

        class TestDTO {
           @NotNull
           private String firstName;
           @Valid
           private EmbeddedObject embeddedObject;
        ...
        }
        class EmbeddedObject {
           @NotNull
           private String lastName;
        ...
        }

        Using the TestDTO on a page in the following way:
        class MyPage{
        ...
           @Property
           private TestDTO testDTO;

           @Component(parameters = {"validate=testDTO"})
           private Form form;

           @Component(parameters = {"value=testDTO.firstName"})
           private TextField firstName;

           @Component(parameters = {"value=testDTO.embeddedObject.lastName"})
           private TextField embeddedField;
        ...
        }

        Submitting the form validates all the attributes correctly (also the embedded object validation error is listed in the t:errors component) but when it comes to BeanFieldValidator only lastName is on the Environment Stack in the BeanValidationContext. As TestDTO doesn't contain the property lastName and there's no objectpath available it doesn't traverse down the objects and can't assign the correct validation error.
        The outcome is that even the property is validated correctly, there's no red-frame (css error class) on the appropriate field in the UI.
        Tapestry-beanvalidator isn't validating nested objects correctly, the problem is that component parameters i.e. the TextField#value is only bound to the attribute itself but doesn't contain the full objectpath, so using a DTO like:

        class TestDTO {
           @NotNull
           private String firstName;
           @Valid
           private EmbeddedObject embeddedObject;
        ...
        }
        class EmbeddedObject {
           @NotNull
           private String lastName;
        ...
        }

        Using the TestDTO on a page in the following way:
        class MyPage{
        ...
           @Property
           private TestDTO testDTO;

           @Component(parameters = {"validate=testDTO"})
           private Form form;

           @Component(parameters = {"value=testDTO.firstName"})
           private TextField firstName;

           @Component(parameters = {"value=testDTO.embeddedObject.lastName"})
           private TextField embeddedField;
        ...
        }

        Submitting the form validates all the attributes correctly (also the embedded object validation error is listed in the t:errors component) but when it comes to BeanFieldValidator only lastName is on the Environment Stack in the BeanValidationContext. As TestDTO doesn't contain the property lastName and there's no objectpath available it doesn't traverse down the objects and can't assign the correct validation error.
        The outcome is that even the property is validated correctly, there's no red-frame (css error class) on the appropriate field in the UI.

        For reference: http://tapestry.1045711.n5.nabble.com/tapestry-beanvalidation-td4921787.html
        Howard M. Lewis Ship made changes -
        Affects Version/s 5.2 [ 12313900 ]
        Affects Version/s 5.2.6 [ 12316674 ]
        Thiago H. de Paula Figueiredo made changes -
        Assignee Thiago H. de Paula Figueiredo [ thiagohp ]
        Thiago H. de Paula Figueiredo made changes -
        Status Open [ 1 ] In Progress [ 3 ]
        Thiago H. de Paula Figueiredo made changes -
        Status In Progress [ 3 ] Resolved [ 5 ]
        Fix Version/s 5.4 [ 12316401 ]
        Resolution Fixed [ 1 ]
        Thiago H. de Paula Figueiredo made changes -
        Labels binding jsr-303 parameter tapestry-beanvalidator validation validationdecorator binding jsr-303 month-of-tapestry parameter tapestry-beanvalidator validation validationdecorator

          People

          • Assignee:
            Thiago H. de Paula Figueiredo
            Reporter:
            Matthias Melitzer
          • Votes:
            3 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development