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

<wicket:enclosure> bug: setObject(null) called for excplicitly invisible fields in a non-visible enclosure

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.3.1
    • 1.3.3
    • wicket
    • None

    Description

      It seems that the value for fields that are made invisible because a surrounding enclosure is actually lost on submit of the form.

      Consider the following code:

      public class HomePage extends WebPage {
      private MyObject myObject;

      public HomePage(final PageParameters parameters) {
      myObject = new MyObject();
      myObject.setField1("field1Value");
      myObject.setField2("field2Value");

      Form f = new Form("f", new CompoundPropertyModel(myObject));
      add(f);

      f.add(new TextField("field1").setVisible(false));
      f.add(new TextField("field2"));

      f.add(new Button("submit") {
      @Override public void onSubmit()

      { System.out.println("Field 2 value should be 'field2Value' but is : " + myObject.getField2()); }

      });
      }

      class MyObject implements Serializable {
      private String field1;
      private String field2;

      public String getField1()

      { return field1; }

      public void setField1(String field1)

      { this.field1 = field1; }

      public String getField2()

      { return field2; }

      public void setField2(String field2)

      { this.field2 = field2; }

      }
      }

      With the following markup:

      <form wicket:id="f">
      <wicket:enclosure child="field1">
      <input type="text" wicket:id="field1"/>
      <input type="text" wicket:id="field2"/>
      </wicket:enclosure>
      <input type="submit" wicket:id="submit"/>
      </form>

      Field1 keeps it's value onSubmit, but the value for field2 is lost, and my model object has null in field2. If I implicitly call setVisible(false) on the TextField for field2, the value is kept onSubmit.

      Igor put better like this I guess:

      when the page renders none of the fields are shown. after submit,
      however, myobject.getfield1() is still "field1value" but
      myobject.getfield2() is null - which implies that textfield2 is still
      processed even though it is inside an enclosure that has been hidden.

      Attachments

        1. myproject.zip
          7 kB
          Edvin Syse
        2. wicket-1391-draft.patch.txt
          5 kB
          Igor Vaynberg

        Issue Links

          Activity

            People

              ivaynberg Igor Vaynberg
              edvin Edvin Syse
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: