Hi, I've also tested without the prefix input name and it's still the same.
Thanks, Behrooz On Thu, Jan 3, 2013 at 9:08 AM, Martin Grigorov <mgrigo...@apache.org>wrote: > 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/> > -- -- Behrooz Nobakht