You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by "Brown, Berlin [GCG-PFS]" <Be...@Primerica.com> on 2010/07/09 22:52:10 UTC

Issues with form submit, not retaining values from session without ajax

I have a page that has a html components like a select list and radio
buttons.  And those components will invoke the onchange event to submit
the form or move to the next page.
 
It doesn't look like I am moving to the next page.  My "model" values
dont' seem to be retained, at least they aren't retained in for the
radio buttons, text boxes.
 
For example, I was thinking like Struts or Spring, I would call
"onchange" on a radio button, the page would reload and all of my values
would be retained.  The values are NOT retained.
 
Here are two radio buttons.  I want to select one, do an onchange and
have retain the value of radiogroup2.  That is not happening: 
Also, I am losing the values of my textfields.
 
What would I need to to keep the values of the widgets regardless if I
submit the page or do an onchange.
 
Source in a paste bin:
 
 
http://paste.lisp.org/display/112321
 
=========
Snippet, two radio buttons.  Radio two loses its values.
 
final RadioChoice radioGroupYesNo2 = new RadioChoice("radioGroup2", new
PropertyModel(bean, "yesNo2"), Arrays.asList(YES_NO)) {
      
         @Override
   public boolean wantOnSelectionChangedNotifications() {   
    return true;
   }
   @Override
   public void onSelectionChanged(Object newSel) {
    this.setResponsePage(TestPage.class);
   }   
   @Override
   public boolean isVisible() {
    return true;
   }
  }; // End of add radio group //  
  radioGroupYesNo2.setPrefix("");
  radioGroupYesNo2.setSuffix("");
  form.add(radioGroupYesNo2);
  
  // Add Link //
  this.add(new SubmitLink("linkSubmit", form) {   
   @Override
   public void onSubmit() {
    // Here what is the difference between the Class and the Object
    this.setResponsePage(TestPage.class);
   }
  });
 } 
 public final DropDownChoice createDropDown(final String str) {
 
  // Add list select elements.
        final ChoiceRenderer choiceRenderer = new ChoiceRenderer("name",
"value"); 
        final List<Select> list1 = new ArrayList<Select>();
        list1.add(new Select("select1", "select1"));
        list1.add(new Select("select2", "select2"));
        
        final DropDownChoice dropDown = new DropDownChoice(str, list1,
choiceRenderer) {         
   private static final long serialVersionUID = 3169945459254179351L;   
   @Override
   protected boolean wantOnSelectionChangedNotifications() {
    return false;
   }   
   @Override
   protected void onSelectionChanged(Object newSelection) {
    this.setResponsePage(TestPage.class);
   }
        };        
        dropDown.setRequired(true);
        return dropDown;
 }
==============
 
Full Source:
 
/**
 * File: TestPage.java 
 */
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.PropertyModel;
 
import TestBean.Select;
 
public class TestPage extends WebPage {
 
 public static final String [] YES_NO = {
  "Yes", "No"
 };
 
 @SuppressWarnings("unchecked")
 public TestPage(final PageParameters parameters) {    
  super(parameters);
  
  TestBean bean = new TestBean();
  if (WicketSession.get().getTestBean() == null) {
   bean = new TestBean();
   WicketSession.get().setTestBean(bean);
  } else {
   bean = WicketSession.get().getTestBean();   
  }
  
  final Form<TestBean> form = new Form<TestBean>("form", new
CompoundPropertyModel(bean));  
  this.add(form);
  
  form.add(new TextField("firstName"));
  form.add(new TextField("lastName"));
  
  form.add(createDropDown("selectBox1"));
  form.add(createDropDown("selectBox2"));
   
  final RadioChoice radioGroupYesNo = new RadioChoice("radioGroup1", new
PropertyModel(bean, "yesNo1"), Arrays.asList(YES_NO)) {
     
         @Override
   public boolean wantOnSelectionChangedNotifications() {   
    return true;
   }
   @Override
   public void onSelectionChanged(Object newSel) {
    this.setResponsePage(TestPage.class);
   }   
   @Override
   public boolean isVisible() {
    return true;
   }
  }; // End of add radio group //  
  radioGroupYesNo.setPrefix("");
  radioGroupYesNo.setSuffix("");
  form.add(radioGroupYesNo);
  
  final RadioChoice radioGroupYesNo2 = new RadioChoice("radioGroup2",
new PropertyModel(bean, "yesNo2"), Arrays.asList(YES_NO)) {
      
         @Override
   public boolean wantOnSelectionChangedNotifications() {   
    return true;
   }
   @Override
   public void onSelectionChanged(Object newSel) {
    this.setResponsePage(TestPage.class);
   }   
   @Override
   public boolean isVisible() {
    return true;
   }
  }; // End of add radio group //  
  radioGroupYesNo2.setPrefix("");
  radioGroupYesNo2.setSuffix("");
  form.add(radioGroupYesNo2);
  
  // Add Link //
  this.add(new SubmitLink("linkSubmit", form) {   
   @Override
   public void onSubmit() {
    // Here what is the difference between the Class and the Object
    this.setResponsePage(TestPage.class);
   }
  });
 } 
 public final DropDownChoice createDropDown(final String str) {
 
  // Add list select elements.
        final ChoiceRenderer choiceRenderer = new ChoiceRenderer("name",
"value"); 
        final List<Select> list1 = new ArrayList<Select>();
        list1.add(new Select("select1", "select1"));
        list1.add(new Select("select2", "select2"));
        
        final DropDownChoice dropDown = new DropDownChoice(str, list1,
choiceRenderer) {         
   private static final long serialVersionUID = 3169945459254179351L;   
   @Override
   protected boolean wantOnSelectionChangedNotifications() {
    return false;
   }   
   @Override
   protected void onSelectionChanged(Object newSelection) {
    this.setResponsePage(TestPage.class);
   }
        };        
        dropDown.setRequired(true);
        return dropDown;
 }
 
} // End of the Class //

 
public class TestBean implements Serializable {
 
 private String firstName = "";
 private String lastName = "";
 
 private String yesNo1 = "";
 private String yesNo2 = "";
 private String yesNo3 = "";
 
 private Select selectBox1;
 private Select selectBox2;
 
 public String getFirstName() {
  return firstName;
 }
 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }
 public String getLastName() {
  return lastName;
 }
 public void setLastName(String lastName) {
  this.lastName = lastName;
 }
 
 public static class Select {
  
  private String name = "";
     private String value = "";
  
     public Select(String a, String b) {
      name = a;
      value = b;
     }
     
  public String getName() {
   return name;
  }
  public void setName(String name) {
   this.name = name;
  }  
  public String getValue() {
   return value;
  }
  public void setValue(String value) {
   this.value = value;
  }
          
 }
 public String getYesNo1() {
  return yesNo1;
 }
 public void setYesNo1(String yesNo1) {
  this.yesNo1 = yesNo1;
 }
 public String getYesNo2() {
  return yesNo2;
 }
 public void setYesNo2(String yesNo2) {
  this.yesNo2 = yesNo2;
 }
 public String getYesNo3() {
  return yesNo3;
 }
 public void setYesNo3(String yesNo3) {
  this.yesNo3 = yesNo3;
 }
 public Select getSelectBox1() {
  return selectBox1;
 }
 public void setSelectBox1(Select selectBox1) {
  this.selectBox1 = selectBox1;
 } 
 public Select getSelectBox2() {
  return selectBox2;
 }
 public void setSelectBox2(Select selectBox2) {
  this.selectBox2 = selectBox2;
 } 
}

=============
 
 
<html>
    <body>        
        <form wicket:id="form">        
            <input wicket:id="firstName" />
            <br />
            <input wicket:id="lastName" />
            <br />
            <select wicket:id="selectBox1"><option /></select>
            <br />
            <select wicket:id="selectBox2"><option /></select>

            <br />              
              <table><tr>
              <td>Radio 1</td>
               <td>
                 <wicket:container wicket:id="radioGroup1">
                   <input type="radio">y</input>
                   <input type="radio">n</input>
                 </wicket:container>
               </td>                                   
              </tr></table>   
              <br />
              
              <table><tr>
              <td>Radio 2</td>
               <td>
                 <wicket:container wicket:id="radioGroup2">
                   <input type="radio">y</input>
                   <input type="radio">n</input>
                 </wicket:container>
               </td>                                   
              </tr></table>
                        
        </form>                
        <a wicket:id="linkSubmit">Submit Link</a>        
    </body>
</html>

 
 
 
 
 
Berlin Brown
 

Re: Issues with form submit, not retaining values from session without ajax

Posted by Sven Meier <sv...@meiers.net>.
Hi,

 >     public void onSelectionChanged(Object newSel) {
 >      this.setResponsePage(TestPage.class);
 >     }

you're telling Wicket to switch to a new instance of TestPage on each 
selection change.

Just leave this method empty and Wicket will re-render the current page, 
retaining the current values.

Sven


Am 09.07.2010 22:52, schrieb Brown, Berlin [GCG-PFS]:
> I have a page that has a html components like a select list and radio
> buttons.  And those components will invoke the onchange event to submit
> the form or move to the next page.
>
> It doesn't look like I am moving to the next page.  My "model" values
> dont' seem to be retained, at least they aren't retained in for the
> radio buttons, text boxes.
>
> For example, I was thinking like Struts or Spring, I would call
> "onchange" on a radio button, the page would reload and all of my values
> would be retained.  The values are NOT retained.
>
> Here are two radio buttons.  I want to select one, do an onchange and
> have retain the value of radiogroup2.  That is not happening:
> Also, I am losing the values of my textfields.
>
> What would I need to to keep the values of the widgets regardless if I
> submit the page or do an onchange.
>
> Source in a paste bin:
>
>
> http://paste.lisp.org/display/112321
>
> =========
> Snippet, two radio buttons.  Radio two loses its values.
>
> final RadioChoice radioGroupYesNo2 = new RadioChoice("radioGroup2", new
> PropertyModel(bean, "yesNo2"), Arrays.asList(YES_NO)) {
>
>           @Override
>     public boolean wantOnSelectionChangedNotifications() {
>      return true;
>     }
>     @Override
>     public void onSelectionChanged(Object newSel) {
>      this.setResponsePage(TestPage.class);
>     }
>     @Override
>     public boolean isVisible() {
>      return true;
>     }
>    }; // End of add radio group //
>    radioGroupYesNo2.setPrefix("");
>    radioGroupYesNo2.setSuffix("");
>    form.add(radioGroupYesNo2);
>
>    // Add Link //
>    this.add(new SubmitLink("linkSubmit", form) {
>     @Override
>     public void onSubmit() {
>      // Here what is the difference between the Class and the Object
>      this.setResponsePage(TestPage.class);
>     }
>    });
>   }
>   public final DropDownChoice createDropDown(final String str) {
>
>    // Add list select elements.
>          final ChoiceRenderer choiceRenderer = new ChoiceRenderer("name",
> "value");
>          final List<Select>  list1 = new ArrayList<Select>();
>          list1.add(new Select("select1", "select1"));
>          list1.add(new Select("select2", "select2"));
>
>          final DropDownChoice dropDown = new DropDownChoice(str, list1,
> choiceRenderer) {
>     private static final long serialVersionUID = 3169945459254179351L;
>     @Override
>     protected boolean wantOnSelectionChangedNotifications() {
>      return false;
>     }
>     @Override
>     protected void onSelectionChanged(Object newSelection) {
>      this.setResponsePage(TestPage.class);
>     }
>          };
>          dropDown.setRequired(true);
>          return dropDown;
>   }
> ==============
>
> Full Source:
>
> /**
>   * File: TestPage.java
>   */
>
> import java.util.ArrayList;
> import java.util.Arrays;
> import java.util.List;
>
> import org.apache.wicket.PageParameters;
> import org.apache.wicket.markup.html.WebPage;
> import org.apache.wicket.markup.html.form.ChoiceRenderer;
> import org.apache.wicket.markup.html.form.DropDownChoice;
> import org.apache.wicket.markup.html.form.Form;
> import org.apache.wicket.markup.html.form.RadioChoice;
> import org.apache.wicket.markup.html.form.SubmitLink;
> import org.apache.wicket.markup.html.form.TextField;
> import org.apache.wicket.model.CompoundPropertyModel;
> import org.apache.wicket.model.PropertyModel;
>
> import TestBean.Select;
>
> public class TestPage extends WebPage {
>
>   public static final String [] YES_NO = {
>    "Yes", "No"
>   };
>
>   @SuppressWarnings("unchecked")
>   public TestPage(final PageParameters parameters) {
>    super(parameters);
>
>    TestBean bean = new TestBean();
>    if (WicketSession.get().getTestBean() == null) {
>     bean = new TestBean();
>     WicketSession.get().setTestBean(bean);
>    } else {
>     bean = WicketSession.get().getTestBean();
>    }
>
>    final Form<TestBean>  form = new Form<TestBean>("form", new
> CompoundPropertyModel(bean));
>    this.add(form);
>
>    form.add(new TextField("firstName"));
>    form.add(new TextField("lastName"));
>
>    form.add(createDropDown("selectBox1"));
>    form.add(createDropDown("selectBox2"));
>
>    final RadioChoice radioGroupYesNo = new RadioChoice("radioGroup1", new
> PropertyModel(bean, "yesNo1"), Arrays.asList(YES_NO)) {
>
>           @Override
>     public boolean wantOnSelectionChangedNotifications() {
>      return true;
>     }
>     @Override
>     public void onSelectionChanged(Object newSel) {
>      this.setResponsePage(TestPage.class);
>     }
>     @Override
>     public boolean isVisible() {
>      return true;
>     }
>    }; // End of add radio group //
>    radioGroupYesNo.setPrefix("");
>    radioGroupYesNo.setSuffix("");
>    form.add(radioGroupYesNo);
>
>    final RadioChoice radioGroupYesNo2 = new RadioChoice("radioGroup2",
> new PropertyModel(bean, "yesNo2"), Arrays.asList(YES_NO)) {
>
>           @Override
>     public boolean wantOnSelectionChangedNotifications() {
>      return true;
>     }
>     @Override
>     public void onSelectionChanged(Object newSel) {
>      this.setResponsePage(TestPage.class);
>     }
>     @Override
>     public boolean isVisible() {
>      return true;
>     }
>    }; // End of add radio group //
>    radioGroupYesNo2.setPrefix("");
>    radioGroupYesNo2.setSuffix("");
>    form.add(radioGroupYesNo2);
>
>    // Add Link //
>    this.add(new SubmitLink("linkSubmit", form) {
>     @Override
>     public void onSubmit() {
>      // Here what is the difference between the Class and the Object
>      this.setResponsePage(TestPage.class);
>     }
>    });
>   }
>   public final DropDownChoice createDropDown(final String str) {
>
>    // Add list select elements.
>          final ChoiceRenderer choiceRenderer = new ChoiceRenderer("name",
> "value");
>          final List<Select>  list1 = new ArrayList<Select>();
>          list1.add(new Select("select1", "select1"));
>          list1.add(new Select("select2", "select2"));
>
>          final DropDownChoice dropDown = new DropDownChoice(str, list1,
> choiceRenderer) {
>     private static final long serialVersionUID = 3169945459254179351L;
>     @Override
>     protected boolean wantOnSelectionChangedNotifications() {
>      return false;
>     }
>     @Override
>     protected void onSelectionChanged(Object newSelection) {
>      this.setResponsePage(TestPage.class);
>     }
>          };
>          dropDown.setRequired(true);
>          return dropDown;
>   }
>
> } // End of the Class //
>
>
> public class TestBean implements Serializable {
>
>   private String firstName = "";
>   private String lastName = "";
>
>   private String yesNo1 = "";
>   private String yesNo2 = "";
>   private String yesNo3 = "";
>
>   private Select selectBox1;
>   private Select selectBox2;
>
>   public String getFirstName() {
>    return firstName;
>   }
>   public void setFirstName(String firstName) {
>    this.firstName = firstName;
>   }
>   public String getLastName() {
>    return lastName;
>   }
>   public void setLastName(String lastName) {
>    this.lastName = lastName;
>   }
>
>   public static class Select {
>
>    private String name = "";
>       private String value = "";
>
>       public Select(String a, String b) {
>        name = a;
>        value = b;
>       }
>
>    public String getName() {
>     return name;
>    }
>    public void setName(String name) {
>     this.name = name;
>    }
>    public String getValue() {
>     return value;
>    }
>    public void setValue(String value) {
>     this.value = value;
>    }
>
>   }
>   public String getYesNo1() {
>    return yesNo1;
>   }
>   public void setYesNo1(String yesNo1) {
>    this.yesNo1 = yesNo1;
>   }
>   public String getYesNo2() {
>    return yesNo2;
>   }
>   public void setYesNo2(String yesNo2) {
>    this.yesNo2 = yesNo2;
>   }
>   public String getYesNo3() {
>    return yesNo3;
>   }
>   public void setYesNo3(String yesNo3) {
>    this.yesNo3 = yesNo3;
>   }
>   public Select getSelectBox1() {
>    return selectBox1;
>   }
>   public void setSelectBox1(Select selectBox1) {
>    this.selectBox1 = selectBox1;
>   }
>   public Select getSelectBox2() {
>    return selectBox2;
>   }
>   public void setSelectBox2(Select selectBox2) {
>    this.selectBox2 = selectBox2;
>   }
> }
>
> =============
>
>
> <html>
>      <body>
>          <form wicket:id="form">
>              <input wicket:id="firstName" />
>              <br />
>              <input wicket:id="lastName" />
>              <br />
>              <select wicket:id="selectBox1"><option /></select>
>              <br />
>              <select wicket:id="selectBox2"><option /></select>
>
>              <br />
>                <table><tr>
>                <td>Radio 1</td>
>                 <td>
>                   <wicket:container wicket:id="radioGroup1">
>                     <input type="radio">y</input>
>                     <input type="radio">n</input>
>                   </wicket:container>
>                 </td>
>                </tr></table>
>                <br />
>
>                <table><tr>
>                <td>Radio 2</td>
>                 <td>
>                   <wicket:container wicket:id="radioGroup2">
>                     <input type="radio">y</input>
>                     <input type="radio">n</input>
>                   </wicket:container>
>                 </td>
>                </tr></table>
>
>          </form>
>          <a wicket:id="linkSubmit">Submit Link</a>
>      </body>
> </html>
>
>
>
>
>
>
> Berlin Brown
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org