Re: Ajax has too much control?
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 AjaxFormSubmittingChangeListenerDropDownChoiceT extends DropDownChoiceT { /** 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, IModelList? extends T choices, IChoiceRendererT renderer) { super(id, choices, renderer); } /** * @param target */ protected abstract void onSubmit(AjaxRequestTarget target); /** * @param target */ protected void onError(AjaxRequestTarget target) { onSubmit(target
Re: Ajax has too much control?
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 AjaxFormSubmittingChangeListenerDropDownChoiceT extends DropDownChoiceT { /** 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, IModelList? extends T choices, IChoiceRendererT renderer) { super(id, choices, renderer); } /** * @param target */ protected abstract void onSubmit
Re: Ajax has too much control?
Martin, I tried your approach it will not be working for me. Because I am going to add other required fields before or after the two dropdown list. Using AjaxFormSubmitBehavior would likely cause validation errors all the time. Besides, AjaxFormComponentUpdatingBehavior should be what I need: redraw part of a web page via Ajax without submitting a form. Thank YOU for your help! All the best, David --- On Mon, 3/22/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: Monday, March 22, 2010, 10:52 AM 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
Re: Ajax has too much control?
Hi! I tried your approach it will not be working for me. Because I am going to add other required fields before or after the two dropdown list. Using AjaxFormSubmitBehavior would likely cause validation errors all the time. No. AjaxFormSubmittingChangeListenerBehavior does NOT validate the form. That is the whole point of the behavior. ** Martin All the best, David --- On Mon, 3/22/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: Monday, March 22, 2010, 10:52 AM 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
Re: Ajax has too much control?
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
Re: Ajax has too much control?
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
Re: Ajax has too much control?
Do you add the state ddc to the ajax target when you get a ajax country event? - Original message - 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
Re: Ajax has too much control?
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
Re: Ajax has too much control?
, List? extends T data, IChoiceRendererT 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
Ajax has too much control?
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