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

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.3.1
    • Fix Version/s: 1.3.3
    • Component/s: wicket
    • Labels:
      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. wicket-1391-draft.patch.txt
          5 kB
          Igor Vaynberg
        2. myproject.zip
          7 kB
          Edvin Syse

          Issue Links

            Activity

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: