Hi, If you are able to reproduce the problem in a quickstart application then please attach it to a ticket in Jira. But I guess the problem is related to the custom prefix you use (# getInputNamePrefix()). In FormComponent#getInputAsArray() check what is the inputName and compare it against the ones shown by Firebug.
On Thu, Jan 3, 2013 at 1:56 AM, Behrooz Nobakht <nob...@gmail.com> wrote: > Hello, > > I'm trying to have a simple widget in Apache Wicket 6.4.0 using > Form< > http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/markup/html/form/Form.html > > > , DropDownChoice< > http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/markup/html/form/DropDownChoice.html > > > ,AjaxButton< > http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/ajax/markup/html/form/AjaxButton.html > > > along > with AjaxFormComponentUpdatingBehavior< > http://ci.apache.org/projects/wicket/apidocs/6.0.x/org/apache/wicket/ajax/form/AjaxFormComponentUpdatingBehavior.html > > > . > > The model (an inner class) that is used is as follows: > > private class SampleModel implements IClusterable { > > private static final long serialVersionUID = 1L; > > private String value; > > public void setValue(String value) { > this.value = value; > } > > public String getValue() { > return value; > } > > @Override > public int hashCode() { > return value.hashCode(); > } > > @Override > public boolean equals(Object obj) { > if (obj == null) { > return false; > } > if (obj == this) { > return true; > } > if (obj instanceof SampleModel == false) { > return false; > } > return hashCode() == obj.hashCode(); > } > } > > > The form is another class as: > > private class TheForm extends Form<SampleModel> { > > private static final long serialVersionUID = 1L; > > // This form is to be used several times in a single large page > private final String prefix = "form_" + (counter++) + "_"; > > public TheForm(String id, SampleModel model) { > super(id, new CompoundPropertyModel<>(model)); > List<String> choices = getChoices(); > final DropDownChoice<String> select = new > DropDownChoice<String>("value", choices); > select.setOutputMarkupId(true); > select.add(new AjaxFormComponentUpdatingBehavior("onchange") { > > private static final long serialVersionUID = 1L; > > @Override > protected void onUpdate(AjaxRequestTarget target) { > String m1 = select.getModelObject(); > String m2 = TheForm.this.getModelObject().getValue(); > System.out.println(m1 + " ===== " + m2); > } > > }); > > AjaxButton action1 = new AjaxButton("action", Model.of("Ajax > Action")) { > > private static final long serialVersionUID = 1L; > > @Override > protected void onSubmit(AjaxRequestTarget target, Form<?> > form) { > String m1 = select.getModelObject(); > String m2 = TheForm.this.getModelObject().getValue(); > System.out.println(m1 + " ===== " + m2); > } > > }; > action1.setOutputMarkupId(true); > > add(select); > add(action1); > } > > @Override > protected String getInputNamePrefix() { > return prefix; > } > } > > > And putting it all together in a simple widget class: > > public class SampleFormDropDownWidget extends Panel { > > private static final long serialVersionUID = 1L; > > private static int counter = 1; > > private SampleModel model = new SampleModel(); > > public SampleFormDropDownWidget(String id) { > super(id); > model.setValue("C"); > TheForm form = new TheForm("form", model); > add(form); > } > > private List<String> getChoices() { > return Lists.newArrayList("A", "B", "C", "D", "E", "F", "G"); > }} > > > And the markup HTML is: > > <wicket:panel> > <form class="form-horizontal" wicket:id="form"> > <div class="control-group"> > <label class="control-label">Choices</label> > <div class="controls"> > <select class="input-xlarge" wicket:id="value"></select> > </div> > </div> > <div class="form-actions"> > <input class="btn" wicket:id="action" /> > </div> > </form></wicket:panel> > > > Using a client debugging tool such as FireBug, I can trace that the AJAX > request actually carries POST data, e.g.: > > > form_1_formb1_hf_0=&form_1_value=5&form_1_action=Ajax+Action&form_1_action=1 > > However, in both cases of onUpdate for the select component and onSubmit > for > the button, I getnull values. Additionally, I debugged the code until > Wicket's FormComponent#getInputAsArray()and there actually I can see that > > RequestCycle.getRequest().getRequestParameters().getParameterValues(VALUE_SELECT)does > not find any data on the request parameters. > > Is there a chance that this could be bug in Wicket to ignore AJAX request > payload? Or, what am I doing wrong? Thanks. > > Thanks, > -- Behrooz Nobakht > -- Martin Grigorov jWeekend Training, Consulting, Development http://jWeekend.com <http://jweekend.com/>