Hi! If you redraw something, you need to submit the form values, otherwise the redrawn state is different... if that's your case.
** Martin 2010/3/22 David Chang <david_q_zh...@yahoo.com>: > > Hello Martin, > > Thanks for your input and sharing your code! I will give it a try. > > Did you have the same problem I have now? > > Here is what I have for the Country DDC: > > countryDDC.add(new AjaxFormComponentUpdatingBehavior("onchange") { > @Override > protected void onUpdate(AjaxRequestTarget target) { > if (target != null) { > MyUser u = form.getModelObject(); > u.setState(null); > DropDownChoice stateDDC = (DropDownChoice) form.get("state"); > > stateDDC.setChoices(objectService.findStatesForLocale(getSession().getLocale())); > target.addComponent(countryDDC); > target.addComponent(stateDDC); > } > } > }); > > > As you can see, I am using AjaxFormComponentUpdatingBehavior. Why do you use > AjaxFormSubmitBehavior? In my case, I am not submitting a form. > > I am new in Wicket. Thanks for your help! > > Best. > -David > > > > > > --- On Sun, 3/21/10, Martin Makundi <martin.maku...@koodaripalvelut.com> > wrote: > >> From: Martin Makundi <martin.maku...@koodaripalvelut.com> >> Subject: Re: Ajax has too much control? >> To: users@wicket.apache.org >> Date: Sunday, March 21, 2010, 11:38 AM >> Hi David! >> >> Maybe you need this (at least this is what worked for me): >> >> /** >> * @author Martin >> */ >> public abstract class >> AjaxFormSubmittingChangeListenerBehavior extends >> AjaxFormSubmitBehavior { >> private final static Method hiddenFieldGetter; >> static { >> try { >> hiddenFieldGetter = >> Form.class.getDeclaredMethod("getHiddenFieldId"); >> >> hiddenFieldGetter.setAccessible(true); >> } catch (Exception e) { >> throw new RuntimeException(e); >> } >> } >> >> /** >> * @see >> org.apache.wicket.ajax.AbstractDefaultAjaxBehavior#onBind() >> */ >> @Override >> protected void onBind() { >> super.onBind(); >> >> if (!(getComponent() instanceof >> IOnChangeListener)) >> { >> throw new >> WicketRuntimeException("Behavior " + getClass().getName() + >> " can only be added to an >> instance of a IOnChangeListener"); >> } >> } >> >> /** >> * @param event >> */ >> public >> AjaxFormSubmittingChangeListenerBehavior(String event) { >> super(event); >> } >> >> /** >> * @see >> org.apache.wicket.ajax.form.AjaxFormSubmitBehavior#onError(org.apache.wicket.ajax.AjaxRequestTarget) >> */ >> @Override >> protected void onError(AjaxRequestTarget target) { >> onSubmit(target); >> } >> >> /** >> * @see >> org.apache.wicket.ajax.form.AjaxFormSubmitBehavior#onEvent(org.apache.wicket.ajax.AjaxRequestTarget) >> */ >> @Override >> protected void onEvent(AjaxRequestTarget target) { >> HttpServletRequest httpServletRequest = >> ((WebRequest) getComponent() >> >> .getRequest()).getHttpServletRequest(); >> >> Map parameters; >> >> if (httpServletRequest instanceof >> MockHttpServletRequest) { >> parameters = >> ((MockHttpServletRequest) >> httpServletRequest).getParameterMap(); >> } else { >> parameters = >> ((org.mortbay.jetty.Request) >> httpServletRequest).getParameters(); >> } >> >> parameters.put(getHiddenFieldId(getForm()), >> getComponent().urlFor(IOnChangeListener.INTERFACE)); >> >> final FormComponent<?> formComponent = >> (FormComponent<?>) getComponent(); >> >> try { >> if (isUpdateModel()) { >> formComponent.inputChanged(); >> formComponent.validate(); >> >> if >> (!formComponent.hasErrorMessage()) { >> formComponent.valid(); >> >> formComponent.updateModel(); >> } >> } >> >> super.onEvent(target); >> } catch (RuntimeException e) { >> >> Utils.errorLog(AjaxFormSubmittingChangeListenerBehavior.class, >> e); >> onError(target); >> } >> } >> >> /** >> * @return boolean >> */ >> protected boolean isUpdateModel() { >> return true; >> } >> >> /** >> * @param form >> * @return String >> */ >> private String getHiddenFieldId(Form<?> form) >> { >> try { >> Form<?> root = >> form.getRootForm(); >> return (String) >> hiddenFieldGetter.invoke(root); >> } catch (Exception e) { >> throw new RuntimeException(e); >> } >> } >> } >> >> >> public abstract class >> AjaxFormSubmittingChangeListenerDropDownChoice<T> >> extends >> DropDownChoice<T> { >> /** Initialize */ { >> add(new >> AjaxFormSubmittingChangeListenerBehavior(JavaScriptConstants.ONCHANGE) >> { >> @Override >> protected void >> onSubmit(AjaxRequestTarget target) { >> >> AjaxFormSubmittingChangeListenerDropDownChoice.this.onSubmit(target); >> } >> }); >> } >> >> /** >> * @see >> org.apache.wicket.MarkupContainer#toString() >> */ >> @Override >> public String toString() { >> return super.toString() + " Value: " + >> getValue(); >> } >> >> /** >> * @param id >> * @param choices >> * @param renderer >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id, >> IModel<List<? extends T>> >> choices, IChoiceRenderer<T> renderer) { >> super(id, choices, renderer); >> } >> >> /** >> * @param target >> */ >> protected abstract void onSubmit(AjaxRequestTarget >> target); >> >> /** >> * @param target >> */ >> protected void onError(AjaxRequestTarget target) { >> onSubmit(target); >> } >> >> /** >> * @param id >> * @param choices >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id, >> IModel<List<? extends T>> >> choices) { >> super(id, choices); >> } >> >> /** >> * @param id >> * @param model >> * @param choices >> * @param renderer >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id, >> IModel<T> model, >> IModel<List<? extends T>> >> choices, IChoiceRenderer<T> renderer) { >> super(id, model, choices, renderer); >> } >> >> /** >> * @param id >> * @param model >> * @param choices >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id, >> IModel<T> model, >> IModel<List<? extends T>> >> choices) { >> super(id, model, choices); >> } >> >> /** >> * @param id >> * @param model >> * @param data >> * @param renderer >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id, >> IModel<T> model, >> List<? extends T> data, >> IChoiceRenderer<T> renderer) { >> super(id, model, data, renderer); >> } >> >> /** >> * @param id >> * @param model >> * @param choices >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id, >> IModel<T> model, >> List<? extends T> choices) { >> super(id, model, choices); >> } >> >> /** >> * @param id >> * @param data >> * @param renderer >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id, >> List<? extends T> data, >> IChoiceRenderer<T> renderer) { >> super(id, data, renderer); >> } >> >> /** >> * @param id >> * @param choices >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id, >> List<? extends T> choices) { >> super(id, choices); >> } >> >> /** >> * @param id >> */ >> public >> AjaxFormSubmittingChangeListenerDropDownChoice(String id) { >> super(id); >> } >> } >> >> >> ** >> Martin >> 2010/3/21 Sven Meier <s...@meiers.net>: >> > David, >> > >> >>It seems that you do not understand the problem I >> have >> > >> > obviously not ;). >> > >> > A quickstart would help me to understand your problem >> better, but perhaps >> > others have already a clue? >> > >> > Sven >> > >> > David Chang wrote: >> >> >> >> Sven, >> >> >> >> Thanks for your input. It seems that you do not >> understand the problem I >> >> have (Wicket problem??? or my page problem???). I >> know how Ajax works by >> >> adding components to Ajax request target. >> >> >> >> When it is non-Ajax, my page runs correctly with >> all three controls. When >> >> Country DDC Ajax-controls State DDC, the two DDC >> works correctly. The >> >> problem is that once this Ajax control is >> triggered by selecting a value in >> >> Country DDC, the State DDC list is NOT updated >> when the Locale DDC value is >> >> changed. >> >> >> >> I have a feel that Wicket has a problem here. I am >> using Wicket 1.4.7. >> >> >> >> Regards. >> >> -David >> >> >> >> >> >> >> >> --- On Sun, 3/21/10, Sven Meier <s...@meiers.net> >> wrote: >> >> >> >> >> >>> >> >>> From: Sven Meier <s...@meiers.net> >> >>> Subject: Re: Ajax has too much control? >> >>> To: users@wicket.apache.org >> >>> Date: Sunday, March 21, 2010, 7:25 AM >> >>> Hi David, >> >>> >> >>> >> DropDownChoice#wantOnSelectionChangedNotifications() will >> >>> trigger rendering of the complete page. >> >>> On Ajax request only those components are >> rendered you >> >>> explicitely 'add' to the request, see >> AjaxRequestTarget#addComponent(). >> >>> >> >>> If you want to have the same for Ajax >> requests, you can >> >>> just 'add' the complete page. >> >>> >> >>> This is not very efficient though. >> >>> >> >>> Sven >> >>> >> >>> David Chang wrote: >> >>> >> >>>> >> >>>> Forgive me about this meaningless subject, >> but I >> >>>> >> >>> >> >>> cannot think of a better one. >> >>> >> >>>> >> >>>> I have been learning Wicket through the >> WIA book. I >> >>>> >> >>> >> >>> just found out something interesting to me. >> Not sure it is a >> >>> bug, design, or something I did wrong. >> >>> >> >>>> >> >>>> I have a page with three Wicket elements: >> >>>> >> >>>> 1. Locale selector through a >> DropDownChoice list. WIA >> >>>> >> >>> >> >>> has complete code about how this works and I >> copied the >> >>> solution into this page >> >>> >> >>>> >> >>>> 2. Country DropDownChoice, whose values >> change between >> >>>> >> >>> >> >>> English and Chinese depending on Locale DDC. >> >>>> >> >>>> 3. State DropDownChoice, whose values >> change between >> >>>> >> >>> >> >>> English and Chinese depending on Locale DDC. >> The values in >> >>> this DDC depends on the chosen value in >> Country DDC. >> >>> >> >>>> >> >>>> Here are the experiments >> >>>> >> >>>> Experiment#1. >> >>>> >> >>>> Country DDC does not control values in >> State DDC via >> >>>> >> >>> >> >>> Ajax and it has >> >>>> >> >>>> protected boolean >> >>>> >> >>> >> >>> wantOnSelectionChangedNotifications() { >> >>> >> >>>> >> >>>> return true; >> >>>> } >> >>>> >> >>>> Everything works like a charm, which >> means >> >>>> (1) when Country DDC value changes, State >> DDC changes >> >>>> >> >>> >> >>> accodingly. >> >>> >> >>>> >> >>>> (2) when Locale changes, both Country DDC >> and State >> >>>> >> >>> >> >>> DDC lists change display values accordingly >> (which means >> >>> both DDCs show a list of values in the same >> language). >> >>> >> >>>> >> >>>> Experiment#2. >> >>>> >> >>>> Country DDC controls values in State DDC >> via Ajax. In >> >>>> >> >>> >> >>> this case, when page is first loaded, I do not >> touch the >> >>> Country DDC or State DDC. I simply change >> locale value any >> >>> number of times, both Country DDC and State >> DDC lists change >> >>> correctly depending on the session locale. >> Here is the >> >>> strange thing. Then I change Country DDC >> value, State DDC >> >>> changes correctly. Since then, HOWEVER, if I >> change locale >> >>> values, ONLY Country DDC list changes >> correctly; State DDC >> >>> list is not updated. It seems Wicket decides >> that State DDC >> >>> is forever Aja-controlled by Country DDC >> only. >> >>> >> >>>> >> >>>> Not qure sure if this a bug, design, or I >> did >> >>>> >> >>> >> >>> something wrong. >> >>> >> >>>> >> >>>> Please let me if you have difficulty >> understanding the >> >>>> >> >>> >> >>> experiments. >> >>> >> >>>> >> >>>> Thanks for any info or help. >> >>>> >> >>>> Cheers! >> >>>> >> >>>> >> >>>> >> >>>> >> >>>> >> >>>> >> >>> >> >>> >> --------------------------------------------------------------------- >> >>> >> >>>> >> >>>> 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 >> >>> >> >>> >> >>> >> >> >> >> >> >> >> >> >> --------------------------------------------------------------------- >> >> 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 >> > >> > >> >> --------------------------------------------------------------------- >> 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 > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org