call clearinput() on the radiogroup so it refreshes based on new model
value you set.

-igor

On Thu, Dec 30, 2010 at 4:57 AM, Ernesto Reinaldo Barreiro
<reier...@gmail.com> wrote:
> I forgot to mentions this is with wicket 1.4.x.
>
> Ernesto
>
> On Thu, Dec 30, 2010 at 1:53 PM, Ernesto Reinaldo Barreiro
> <reier...@gmail.com> wrote:
>> Hi,
>>
>> Apologies for the somewhat lengthy e-mail.
>>
>> Consider the following situation
>>
>> 1-I have a form with a RadioGroup, several Radio buttons, an AJAX
>> submit button and some AJAX links that fetch "information" that can be
>> used to repaint the form and the RadioGroup.
>>
>> In simplified code more or less this.
>>
>> public class RadioPage extends WebPage  {
>>
>>        private static final long serialVersionUID = 1L;
>>
>>        private WebMarkupContainer context;
>>
>>        private Gender gender;
>>
>>        private FeedbackPanel feedbackPanel;
>>
>>        public RadioPage() {
>>              Form<Void> form = new Form<Void>("form");
>>              add(form);
>>              context = new WebMarkupContainer("context");
>>              context.setOutputMarkupId(true);
>>              form.add(context);
>>
>>
>>                RadioGroup<Gender> gender = new RadioGroup<Gender>("gender",
>>                                new PropertyModel<Gender>(this,"gender"));
>>
>>                gender.setRequired(true);
>>                context.add(gender);
>>                // hombre
>>                Radio<Gender> sexoH = new Radio<Gender>("male", new
>> Model<Gender>(Gender.MALE), gender);
>>                gender.add(sexoH);
>>
>>                Radio<Gender> sexoM = new Radio<Gender>("female", new
>> Model<Gender>(Gender.FEMALE), gender);
>>                gender.add(sexoM);
>>
>>                add(new AjaxLink<Void>("makeMale") {
>>
>>                        private static final long serialVersionUID = 1L;
>>
>>                       �...@override
>>                        public void onClick(AjaxRequestTarget target) {
>>                                RadioPage.this.gender = Gender.MALE;
>>                                if(target != null) {
>>                                        target.addComponent(context);
>>                                }
>>                        }
>>                });
>>
>>                add(new AjaxLink<Void>("makeFemale") {
>>
>>                        private static final long serialVersionUID = 1L;
>>
>>                       �...@override
>>                        public void onClick(AjaxRequestTarget target) {
>>                                RadioPage.this.gender = Gender.FEMALE;
>>                                if(target != null) {
>>                                        target.addComponent(context);
>>                                }
>>                        }
>>                });
>>
>>                form.add(new AjaxSubmitLink("submit") {
>>
>>                        private static final long serialVersionUID = 1L;
>>
>>                       �...@override
>>                        protected void onSubmit(AjaxRequestTarget target, 
>> Form<?> form) {
>>                                form.info("Gender was set to " + 
>> RadioPage.this.gender);
>>                                target.addComponent(feedbackPanel);
>>                        }
>>
>>                       �...@override
>>                        protected void onError(AjaxRequestTarget target, 
>> Form<?> form) {
>>                                target.addComponent(feedbackPanel);
>>                        }
>>                });
>>
>>                feedbackPanel = new FeedbackPanel("feedback");
>>                feedbackPanel.setOutputMarkupId(true);
>>                add(feedbackPanel);
>>    }
>>
>>        public Gender getGender() {
>>                return gender;
>>        }
>>
>>        public void setGender(Gender gender) {
>>                this.gender = gender;
>>        }
>> }
>>
>> -----------------RadioPage.html--------------
>>
>> <html 
>> xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd";>
>>    <head>
>>        <title>Test</title>
>>    </head>
>>    <body>
>>        <form wicket:id="form">
>>                <div wicket:id="context">
>>                        <span wicket:id="gender">
>>                                        <input type="radio" wicket:id="male"/>
>>                                        <label for="radio3">Male</label>
>>                                        <input type="radio" 
>> wicket:id="female"/>
>>                                        <label for="radio4">Female</label>
>>                                </span>
>>                        </div>
>>                        <input wicket:id="submit" type="submit" value="AJAX 
>> submit"/>
>>                </form>
>>                <span wicket:id="feedback"></span>
>>                <p>
>>                        Updating RadioGroup via AJAX does not work:
>>                        <a wicket:id="makeMale">Make male</a> and <a
>> wicket:id="makeFemale">Make female</a>.
>>                </p>
>>    </body>
>> </html>
>>
>> and
>>
>> public enum Gender {
>>        FEMALE,
>>        MALE;
>> }
>>
>>
>> 2-You click on the AJAX submit button without selecting any of the
>> radio buttons. This seems to set the rawinput of  RadioGroup to null.
>> 3-You click now on one of the AJAX links (Make male or Make female in
>> the example) in order to fetch the "information"  and repaint the form
>> via AJAX. But radios checked condition is not updated:-(
>>
>> This seems to be because of following code on Radio.onComponentTag():
>>
>>                // compare the model objects of the group and self, if
>> the same add the
>>                // checked attribute, first check if there was a raw input on 
>> the group.
>>                if (group.hasRawInput())
>>                {
>>                        String rawInput = group.getRawInput();
>>                        if (rawInput != null && rawInput.equals(value))
>>                        {
>>                                tag.put("checked", "checked");
>>                        }
>>                }
>>
>> If I rewrite my gender RadioGroup as
>>
>> RadioGroup<Gender> gender = new RadioGroup<Gender>("gender",
>>                                new PropertyModel<Gender>(this,"gender")) {
>>
>>                        private static final long serialVersionUID = 1L;
>>
>>                       �...@override
>>                        public boolean isInputNullable() {
>>                                return false;
>>                        }
>>                };
>>
>> "everything" seems to be working fine. Am I missing some important
>> point on how to use radio groups or  is this a bug? Shall I file a
>> jira issue for this?
>>
>> Thanks in advance,
>>
>> Ernesto
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to