2

Wicket 1.x では、AjaxEventBehavior を使用して、マウス座標を提供する CallBackScript を配置しました。これは私がやったことです: (getEventX() と getEventY() は JavaScript 関数です)

    myObject.add(new AjaxEventBehavior("onClick") {
        private static final long serialVersionUID = 1L;

        @Override
        protected CharSequence getCallbackScript() {
            return generateCallbackScript("wicketAjaxGet('" + getCallbackUrl()
                    + "&x=' + getEventX(this, event) + '&y=' + getEventY(this, event)");
        }

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            final Request request = MyPage.this.getRequest();
            final IRequestParameters parameters = request.getRequestParameters();
            final int x = Integer.parseInt(parameters.getParameterValue("x").toString("0"));
            final int y = Integer.parseInt(parameters.getParameterValue("y").toString("0"));

それは非常にうまくいきました。しかし、Wicket 6.x でこれを行う方法がわかりません。

Ajax リンクの動作方法が変更されたことは理解しています。そこで、以前と同じ方法で getCallBackUrl を使用してみました。しかし、それはうまくいきませんでした。

        public CharSequence getCallbackUrl() {
            final CharSequence callBackUrl = super.getCallbackUrl();

            return callBackUrl + "&x=' + getEventX(this, event) + '&y=' + getEventY(this, event)";
        }

生成された HTML を見ると、ajax リンクが次のようになっていることがわかります。

Wicket.Ajax.ajax({"u":"../page?5-2.IBehaviorListener.2-cityMap&x=' + getEventX(this, event) + '&y=' + getEventY(this, event)","e":"click","c":"cityMap","i":"id29--ajax-indicator"});;

良さそうに見えますが、うまくいきません。

ウィケット6以降、何か間違ったことをしていると確信していますが、正しい方法で行う方法がわかりません。

どんな提案でも大歓迎です。

乾杯ラインハルト

4

3 に答える 3

1

最近、ブログに Wicket 6 AJAX-Behaviors のハウツーを投稿しました。これには、javascript からサーバーへのパラメーターの受け渡しも含まれていました。

http://tom.hombergs.de/2013/01/rolling-your-own-ajax-behavior-with.html

Wicket 6 の新しい AJAX 機能を説明する別の役立つリソースは、https ://cwiki.apache.org/WICKET/wicket-ajax.htmlです。

それが役立つことを願っています。そうでない場合は、リンクをクリックしたときに発生するエラーの種類 (javascript エラー?) を説明してください。

よろしく、トム

于 2013-05-13T14:09:28.907 に答える
0

これを試して

public class MyAjaxButton extends AjaxButton {

  @Override
  protected void onEvent(final AjaxRequestTarget target) {
    HttpServletRequest request = (HttpServletRequest) MyAjaxButton.this.getForm().getRequest().getContainerRequest();
    System.out.println("onEvent: " + request.getMethod());
  }

  @Override
  public void renderHead(final Component component, final IHeaderResponse response) {
    super.renderHead(component, response);
    response.render(OnDomReadyHeaderItem.forScript(this.createAjaxCallbackScript()));
  }

  /**
   * Creates a javascript to perform a post callback
   * @return A script to use in renderHead as ajax callback
   */
   private String createAjaxCallbackScript() {
     final String formId = MyAjaxButton.this.getForm().getMarkupId();
     String call = "Wicket.Ajax.ajax({'m':'post', 'f':'" + formId + "', 'u':'" + this.getCallbackUrl() + "', 'e':'click', 'c':'" + MyAjaxButton.this.getMarkupId() + "'})";
    // You need to have "; return false;" to prevent the normal operation of a submit button (by browser)
    return call + "; return false;";
  }

  @Override
  public CharSequence getPreconditionScript() {
    // Note: You need this "return false;" in addition to prevent the additional (GET) ajax request done (by wicket)
    return "return false;";
  }
}

コールバック スクリプトを編集するには、 http ://wicket.apache.org/guide/guide/ajax.html#ajax_5 を参照してください。

注: スクリプトの「return false」ステートメントがない場合は、追加の無意味なリクエストを受け取ります

于 2014-05-21T13:41:16.273 に答える