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);
> > >  }
> > > }
> > >
> >
>

Reply via email to