I looked some more and found the following: When it works, with my modification, FormComponent.getInputAsArray tries to get parameters for the TextField named "more:moreForm:textfield". I looked in the parameter map or the RequestFacade object and found these: wicket:interface, wicket:ignoreIfNotActive, random, more:moreForm:textfield, radioGroup and more:moreForm:submit. And it finds the TextField.
The version that fails is looking for TextField named "more:textfield". The RequestFacade object has: wicket:interface, wicket:ignoreIfNotActive, random, forma_hf_0, radioGroup and more:submit. Is there a problem with "forma_hf_0? On Thu, Jan 21, 2010 at 7:35 AM, smallufo <small...@gmail.com> wrote: > Yes , indeed , if the form is in the second row (default invisible) , it > works , But I cannot get the first row's data (such as radioGroup's model > object will become null ). > Moreover , Form with multiple row , with something visible and something > extensible (default invisible), it is not so rare. > If the form is not inside a ListView , it will work. > But it just fails if it is inside a ListView. > > 2010/1/21 Chuck Brinkman <chasb1...@gmail.com> > > > I stepped through the code and found that the convertedInput is null when > > processing submit. I didn't see anything that looked like an error > message > > from wicket. I look forward to seeing what the wicket developers have > to > > say. > > > > I'm just a new wicket user but was interested in this issue. I also > found > > that if you make the following changes it will work. > > <tr wicket:id="more"> > > <td colspan="2"> > > *<form wicket:id="moreForm">* > > <input type="text" size="40" value="Please > > leave > > comments" > > wicket:id="textfield" /> > > <input type="submit" value="Submit" > > wicket:id="submit" /> > > * </form>* > > </td> > > </tr> > > > > > > *Form<Void> moreForm = new Form<Void>("moreForm"); > > more.add(moreForm);* > > final TextField<String> textfield = new > TextField<String>( > > "textfield", new Model<String>()); > > *moreForm*.add(textfield); > > AjaxButton button = new AjaxButton("submit") { > > @Override > > protected void onSubmit(AjaxRequestTarget arg0, > Form<?> > > form) { > > System.out.println("radioGroup = " > > + radioGroup.getModelObject() > > + " , textfield.getModelObject() = " > > + textfield.getModelObject()); > > } > > }; > > *moreForm*.add(button); > > > > > > On Wed, Jan 20, 2010 at 10:47 PM, smallufo <small...@gmail.com> wrote: > > > > > This is a full functional Page : > > > > > > I found this problem only occurs when the form is in the listView : > > > If I move the form out of the listView , it works like a charm. > > > Bug ? I am not sure... > > > > > > The link is the screen capture : > > > http://xs.to/image-B859_4B57CDD0.gif > > > > > > > > > MyPage.html > > > > > > <table border="1"> > > > <tr> > > > <th>name</th> > > > <th>more ?</th> > > > </tr> > > > <span wicket:id="listView"> > > > <form wicket:id="form"> > > > <tr> > > > <td wicket:id="name">[name]</td> > > > <td> > > > <span wicket:id="radioGroup"> > > > <input type="radio" wicket:id="yes"/>yes > > > <input type="radio" wicket:id="no"/>no > > > </span> > > > </td> > > > </tr> > > > <tr wicket:id="more"> > > > <td colspan="2"> > > > <input type="text" size="40" value="Please leave comments" > > > wicket:id="textfield"/> > > > <input type="submit" value="Submit" wicket:id="submit"/> > > > </td> > > > </tr> > > > </form> > > > </span> > > > </table> > > > > > > > > > MyPage.java > > > > > > package quickstart.ajax; > > > > > > import java.util.ArrayList; > > > import java.util.List; > > > > > > import org.apache.wicket.ajax.AjaxEventBehavior; > > > import org.apache.wicket.ajax.AjaxRequestTarget; > > > import org.apache.wicket.ajax.markup.html.form.AjaxButton; > > > import org.apache.wicket.markup.html.WebMarkupContainer; > > > import org.apache.wicket.markup.html.WebPage; > > > import org.apache.wicket.markup.html.basic.Label; > > > import org.apache.wicket.markup.html.form.Form; > > > import org.apache.wicket.markup.html.form.Radio; > > > import org.apache.wicket.markup.html.form.RadioGroup; > > > import org.apache.wicket.markup.html.form.TextField; > > > import org.apache.wicket.markup.html.list.ListItem; > > > import org.apache.wicket.markup.html.list.ListView; > > > import org.apache.wicket.model.Model; > > > > > > public class MyPage extends WebPage > > > { > > > private final static List<String> names = new ArrayList<String>(); > > > static > > > { > > > names.add("Andy"); > > > names.add("Brian"); > > > names.add("Carol"); > > > } > > > > > > public MyPage() > > > { > > > ListView<String> listView = new ListView<String>("listView" , names) > > > { > > > @Override > > > protected void populateItem(ListItem<String> item) > > > { > > > > > > Form<Void> form = new Form<Void>("form"); > > > item.add(form); > > > > > > String name = item.getModelObject(); > > > > > > form.add(new Label("name" , name)); > > > > > > final WebMarkupContainer more = new WebMarkupContainer("more"); > > > more.setVisible(false); > > > more.setOutputMarkupPlaceholderTag(true); > > > form.add(more); > > > > > > > > > final RadioGroup<Boolean> radioGroup = new > > > RadioGroup<Boolean>("radioGroup" , Model.of(Boolean.FALSE)); > > > form.add(radioGroup); > > > > > > Radio<Boolean> yes = new Radio<Boolean>("yes" , > > > Model.of(Boolean.TRUE)); > > > Radio<Boolean> no = new Radio<Boolean>("no" , > > > Model.of(Boolean.FALSE)); > > > radioGroup.add(yes); > > > radioGroup.add(no); > > > > > > yes.add(new AjaxEventBehavior("onClick") > > > { > > > @Override > > > protected void onEvent(AjaxRequestTarget target) > > > { > > > more.setVisible(true); > > > target.addComponent(more); > > > } > > > }); > > > > > > no.add(new AjaxEventBehavior("onClick") > > > { > > > @Override > > > protected void onEvent(AjaxRequestTarget target) > > > { > > > more.setVisible(false); > > > target.addComponent(more); > > > } > > > }); > > > > > > final TextField<String> textfield = new > > > TextField<String>("textfield" , new Model<String>()); > > > more.add(textfield); > > > AjaxButton button = new AjaxButton("submit") > > > { > > > @Override > > > protected void onSubmit(AjaxRequestTarget arg0, Form<?> form) > > > { > > > System.out.println("radioGroup = " + > > radioGroup.getModelObject() > > > + " , textfield.getModelObject() = " + textfield.getModelObject()); > > > } > > > }; > > > more.add(button); > > > } > > > }; > > > add(listView); > > > } > > > } > > > > > >