[ 
https://issues.apache.org/jira/browse/WICKET-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12582941#action_12582941
 ] 

Edvin Syse commented on WICKET-1391:
------------------------------------

Would it be possible to atleast give a warning when this situation 
occurs in 1.3.x? The current situation can mean a potential dataloss 
without the developer knowing about it, as each time a new user saves a 
form built this way, data in the hidden fields will actually be lost 
from the database upon save, and that's a MAJOR issue I think.

-- Edvin



> <wicket:enclosure> bug: setObject(null) called for excplicitly invisible 
> fields in a non-visible enclosure
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: WICKET-1391
>                 URL: https://issues.apache.org/jira/browse/WICKET-1391
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.3.1
>            Reporter: Edvin Syse
>            Assignee: Igor Vaynberg
>             Fix For: 1.5-M1
>
>         Attachments: myproject.zip, wicket-1391-draft.patch.txt
>
>
> 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.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to