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