Post 请求 Wicket

Post Request to Wicket

使用 Wicket,

如何将变量 slideCounter 发送到 Wicket?

有人可以举个例子吗?

我找不到这方面的更多信息。

  $(document).on('click', '.lean-overlay', function() {
    var slideCounter = 0;

    // TODO Send slidecounter to wicket
});

发送请求很简单:Wicket.Ajax.post({"u": "the/url?slideCounter="+slideCounter})

更复杂的部分是构造the/url

  1. 要将其发送到组件,该组件应实现 IRequestListener 接口。要构建 url 使用:requestCycle.urlFor(component)
  2. 为了更好地将它发送到 Behavior 实例化 AbstractDefaultAjaxBehavior 并使用其 #getCallbackUrl()

获得 url 后,您需要将其存储在页面 DOM 中,例如使用 OnDomReadyHeaderItem.forScript("window.TheUrl='"+theUrl+"';")

您可以使用 ajax 回调从 javascript 调用 wicket 代码。你可以这样做:

JAVA 代码:

AbstractDefaultAjaxBehavior behave = new AbstractDefaultAjaxBehavior() {

        @Override
        public void renderHead(Component component, IHeaderResponse response) {
            super.renderHead(component, response);
            String componentMarkupId = component.getMarkupId();
            String callbackUrl = getCallbackUrl().toString();
            response.render(JavaScriptHeaderItem.forScript(
                    "var componentMarkupId='" + componentMarkupId
                            + "'; var callbackUrl='" + callbackUrl + "';",
                    "values"));
        }

        protected void respond(final AjaxRequestTarget target) {

            IRequestParameters parameters = RequestCycle.get().getRequest()
                    .getQueryParameters();

            // write yout java code here
            // if you want to use the slideCounter variable
            // you have to retrieve its value like this:
            // parameters.getParameterValue("slideCounter").toString()

        }

    };

    add(behave);

JAVA脚本代码:

$(document).on('click', '.lean-overlay', function() {
var slideCounter = 0;
executeJava(slideCounter);
});

    function executeJava(slideCounter) {
        try {
            var commandToSend = 'slideCounter=' + slideCounter;
            var wcall = Wicket.Ajax.post({
                u: callbackUrl + '&' + commandToSend
            });
        } catch (e) {
            alert(e);
        }
    }