3

Java を使用して JavaScript 変数を取得しようとしています。解決に近づいていると思います。

パネル上の要素の幅を取得したいと考えています。これを実現するために、コールバックを追加してパラメーター (幅と高さ) を取得する動作をパネルに追加しました。

private class ImageBehavior extends AbstractDefaultAjaxBehavior {

    @Override
    protected void respond(AjaxRequestTarget target) {
        //I receive a JavaScript call :)
        StringValue width  = getRequest().getRequestParameters().getParameterValue("width");
        StringValue height = getRequest().getRequestParameters().getParameterValue("height");       
    }

    @Override
    protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
        super.updateAjaxAttributes(attributes);
        attributes.getExtraParameters().put("width", "undef");
        attributes.getExtraParameters().put("height", "undef");
    }

    @Override
    public void renderHead(Component component, IHeaderResponse response) {
        super.renderHead(component, response);
        response.render(OnDomReadyHeaderItem.forScript(getCallbackScript().toString()));

    }
}

JavaScript では、次のコードが呼び出されます。

function callbackWicketNewImage(element) {
    var wcall = Wicket.Ajax.get({ 'u': 'callbackUrl', 'ep' : {'width': element.width(), 'height': element.height()}});
}

js コードが呼び出されると、「respond」メソッドが呼び出されますが、幅と高さのパラメーターの値は変更されませんでした。彼らは「未定義」のままでした。

4

2 に答える 2

2

次のコードで問題を修正しました。抽象 onResponse メソッドは抽象化を目的としていることに注意してください。

public abstract class SizeBehavior extends AbstractDefaultAjaxBehavior {

@Override
protected void respond(AjaxRequestTarget target) {
    IRequestParameters request = RequestCycle.get().getRequest().getRequestParameters();
    onResponse(request.getParameterValue("widthParam").toDouble(),
            request.getParameterValue("heightParam").toDouble());
}

@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
    super.updateAjaxAttributes(attributes);
    attributes.getDynamicExtraParameters()
    .add("return {'widthParam': $(" + getComponent().getMarkupId() + ").width(), " +
                 "'heightParam': $(" + getComponent().getMarkupId() + ").height()}");
}

public void renderHead(Component component, IHeaderResponse response) {
    response.render(OnLoadHeaderItem.forScript(getCallbackScript().toString()));
}

public abstract void onResponse(double width, double height);
}  

行動呼び出し:

add(new SizeBehavior() {
    @Override
    public void onResponse(double width, double height) {
        //set vars..
        widthVar = width;
        heightVar = height;
    }
});
于 2013-09-12T12:56:42.757 に答える
1

メソッドresponseは次のようになります。

@Override
  protected void respond(AjaxRequestTarget target) {
    RequestCycle cycle = RequestCycle.get();
    WebRequest webRequest = (WebRequest) cycle.getRequest();
    StringValue param1 = webRequest.getQueryParameters().getParameterValue("param1");
    StringValue param2 = webRequest.getQueryParameters().getParameterValue("param2");
    // do whatever you need with param1 and param2
  }

を使用しますgetRequestParameters()。そのはずgetQueryParameters()

編集: この記事も参照してください: http://thombergs.wordpress.com/2013/01/07/rolling-your-own-ajax-behavior-with-wicket

于 2013-09-03T07:09:30.417 に答える