The power of this list is amazing - it seems you just had an entire thread
with yourself and answered your own question.  SYNERGY!  :)

But seriously, did you have any remaining questions on this that we could
assist with?


--
Jeremy Thomerson
http://www.wickettraining.com



On Tue, Nov 3, 2009 at 12:22 PM, Martin Makundi <
martin.maku...@koodaripalvelut.com> wrote:

> Hi!
>
> One finishing touch is needed. The hidden field should be cleared
> after ajax submit. It seems to work now.. feel free to critisize.
>
> public abstract class FormSubmitAjaxChangeListenerCallDecorator
> implements IAjaxCallDecorator {
>  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.IAjaxCallDecorator#decorateOnFailureScript(java.lang.CharSequence)
>   */
>  public CharSequence decorateOnFailureScript(
>      CharSequence arg0) {
>     return getSetHiddenFieldValue("").append(arg0);
>   }
>
>  /**
>   * @see
> org.apache.wicket.ajax.IAjaxCallDecorator#decorateOnSuccessScript(java.lang.CharSequence)
>   */
>  public CharSequence decorateOnSuccessScript(
>      CharSequence arg0) {
>     return getSetHiddenFieldValue("").append(arg0);
>   }
>
>  /**
>   * @see
> org.apache.wicket.ajax.IAjaxCallDecorator#decorateScript(java.lang.CharSequence)
>   */
>  public CharSequence decorateScript(CharSequence arg0) {
>     return getSetHiddenFieldValue(getChangeListenerUrl()).append(arg0);
>  }
>
>  /**
>   * @param hiddenFieldId
>   * @param value
>   * @return
>   */
>  private AppendingStringBuffer getSetHiddenFieldValue(CharSequence value) {
>    try {
>       Form<?> root = getForm().getRootForm();
>      String hiddenFieldId;
>       hiddenFieldId = (String) hiddenFieldGetter.invoke(root);
>      return new AppendingStringBuffer("document.getElementById('").append(
>           hiddenFieldId).append("').value='").append(value).append(
>          "';");
>     } catch (Exception e) {
>      throw new RuntimeException(e);
>    }
>  }
>
>  /**
>   * @return Form<?>
>   */
>  public abstract Form<?> getForm();
>
>  /**
>   * @return CharSequence
>   */
>  public abstract CharSequence getChangeListenerUrl();
> }
>
> **
> Martin
>
> 2009/11/3 Martin Makundi <martin.maku...@koodaripalvelut.com>:
> > Hi!
> >
> > I hope I found a solution usin IOnChangeListener.
> >
> > Please try this out and let me know if it works for you. Maybe it
> > should be incorporated into Wicket?
> >
> > public abstract class FormSubmitAjaxChangeListenerCallDecorator
> > implements IAjaxCallDecorator {
> >  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.IAjaxCallDecorator#decorateOnFailureScript(java.lang.CharSequence)
> >   */
> >  public CharSequence decorateOnFailureScript(
> >      CharSequence arg0) {
> >    return arg0;
> >  }
> >
> >  /**
> >   * @see
> org.apache.wicket.ajax.IAjaxCallDecorator#decorateOnSuccessScript(java.lang.CharSequence)
> >   */
> >  public CharSequence decorateOnSuccessScript(
> >      CharSequence arg0) {
> >    return arg0;
> >  }
> >
> >  /**
> >   * @see
> org.apache.wicket.ajax.IAjaxCallDecorator#decorateScript(java.lang.CharSequence)
> >   */
> >  public CharSequence decorateScript(CharSequence arg0) {
> >    Form<?> root = getForm().getRootForm();
> >    String hiddenFieldId;
> >    try {
> >      hiddenFieldId = (String) hiddenFieldGetter.invoke(root);
> >      return new
> AppendingStringBuffer("document.getElementById('").append(
> >
>  hiddenFieldId).append("').value='").append(getChangeListenerUrl()).append(
> >          "';").append(arg0);
> >    } catch (Exception e) {
> >      throw new RuntimeException(e);
> >    }
> >  }
> >
> >  /**
> >   * @return Form<?>
> >   */
> >  public abstract Form<?> getForm();
> >
> >  /**
> >   * @return CharSequence
> >   */
> >  public abstract CharSequence getChangeListenerUrl();
> > }
> >
> >
> > public abstract class AjaxFormSubmittingChangeListenerCheckBox extends
> > CheckBox {
> >  /**
> >   * @param id
> >   * @param model
> >   */
> >  public AjaxFormSubmittingChangeListenerCheckBox(String id,
> > IModel<Boolean> model) {
> >    super(id, model);
> >    add(new AjaxFormSubmitBehavior(JavaScriptConstants.ONCHANGE) {
> >      @Override
> >      protected void onError(AjaxRequestTarget target) {
> >        AjaxFormSubmittingChangeListenerCheckBox.this.onError(target);
> >      }
> >
> >      @Override
> >      protected void onSubmit(AjaxRequestTarget target) {
> >        AjaxFormSubmittingChangeListenerCheckBox.this.onSubmit(target);
> >      }
> >
> >      /**
> >       * @see
> org.apache.wicket.ajax.AbstractDefaultAjaxBehavior#getAjaxCallDecorator()
> >       */
> >      @Override
> >      protected IAjaxCallDecorator getAjaxCallDecorator() {
> >        return new FormSubmitAjaxChangeListenerCallDecorator() {
> >          @Override
> >          public CharSequence getChangeListenerUrl() {
> >            return urlFor(IOnChangeListener.INTERFACE);
> >          }
> >
> >          @Override
> >          public Form<?> getForm() {
> >            return
> AjaxFormSubmittingChangeListenerCheckBox.this.getForm();
> >          }
> >
> >        };
> >      }
> >    });
> >  }
> >
> >  /**
> >   * @param target
> >   */
> >  protected abstract void onSubmit(AjaxRequestTarget target);
> >
> >  /**
> >   * @param target
> >   */
> >  protected void onError(AjaxRequestTarget target) {
> >    onSubmit(target);
> >  }
> >
> >  /**
> >   * @param id
> >   */
> >  public AjaxFormSubmittingChangeListenerCheckBox(String id) {
> >    this(id, null);
> >  }
> > }
> >
> >
> > 2009/11/3 Martin Makundi <martin.maku...@koodaripalvelut.com>:
> >> Hi!
> >>
> >> Maybe this is the solution:
> >>
> >>                        String url =
> getRequest().getParameter(getHiddenFieldId());
> >>                        if (!Strings.isEmpty(url))
> >>                        {
> >>                                dispatchEvent(getPage(), url);
> >>                        }
> >>
> >>
> >> ??
> >>
> >> Attach a change listener with ajax form submit?
> >>
> >> **
> >> Martin
> >>
> >> 2009/11/3 Martin Makundi <martin.maku...@koodaripalvelut.com>:
> >>> Hi!
> >>>
> >>> I need to accomplish the following:
> >>> 1. receive ajax onchange event from a formcomponent
> >>> 2. receive "defaultformprocesing=false" style submit
> >>> 3. repaint an area; I this is why I need the form to be really
> >>> submitted (=rawinput but not validated).
> >>>
> >>> I have built a custom component FormSubmittingDropDownChoice.
> >>>
> >>> The problem is that even if I press another submit component (button,
> >>> for example), the form allways assumes the formSubmitting component to
> >>> be FormSubmittingDropDownChoice. Why? Because the findSubmittingButton
> >>> is so simple that if FormSubmittingDropDownChoice has a value, it is
> >>> the submitting component.
> >>>
> >>> Is there a workaround or fix? How could I achieve similar
> >>> functionality in a working manner? This works well if I click the
> >>> FormSubmittingDropDownChoice, otherwise it does not :(
> >>>
> >>> package com.tustor.wicket.common.reusables.formcomponents;
> >>>
> >>> public class FormSubmittingDropDownChoice<T> extends DropDownChoice<T>
> >>> implements IFormSubmittingComponent {
> >>>
> >>>  public FormSubmittingDropDownChoice(String id, various constructor
> options) {
> >>>    super(id, choices, renderer);
> >>>  }
> >>>  /**
> >>>   * @see
> org.apache.wicket.markup.html.form.IFormSubmittingComponent#getDefaultFormProcessing()
> >>>   */
> >>>  public boolean getDefaultFormProcessing() {
> >>>    return false;
> >>>  }
> >>>
> >>>  /**
> >>>   * @see
> org.apache.wicket.markup.html.form.IFormSubmittingComponent#onSubmit()
> >>>   */
> >>>  public void onSubmit() {
> >>>    // override
> >>>  }
> >>>
> >>>  /**
> >>>   * wicket-ajax:
> >>>   *
> >>>   * if (submitButton != null) {
> >>>   *   s += Wicket.Form.encode(submitButton) + "=1";
> >>>   * }
> >>>   *
> >>>   * @see
> org.apache.wicket.markup.html.form.FormComponent#getInputAsArray()
> >>>   */
> >>>  @Override
> >>>  public String[] getInputAsArray() {
> >>>    return MarkupUtils.filterSubmitIndicator(super.getInputAsArray());
> >>>  }
> >>>
> >>>  /**
> >>>   * @see
> org.apache.wicket.markup.html.form.AbstractSingleSelectChoice#getModelValue()
> >>>   */
> >>>  @Override
> >>>  public String getModelValue() {
> >>>    String value = super.getModelValue();
> >>>    if ("1".equals(value)) {
> >>>      throw new IllegalStateException("1 not supported because of
> >>> javaScript wicket-ajax:submitForm: function(form, submitButton)");
> >>>    }
> >>>    return value;
> >>>  }
> >>> }
> >>>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>

Reply via email to