Re: Ajax has too much control?

2010-03-22 Thread David Chang

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?

2010-03-22 Thread Martin Makundi
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?

2010-03-22 Thread David Chang

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?

2010-03-22 Thread Martin Makundi
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?

2010-03-21 Thread Sven Meier

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?

2010-03-21 Thread David Chang

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?

2010-03-21 Thread Johan Compagner
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?

2010-03-21 Thread Sven Meier

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?

2010-03-21 Thread Martin Makundi
,
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?

2010-03-20 Thread David Chang

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