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

Reply via email to