如何在 Wicket 中从 JavaScript 代码调用 Java 代码?

2022-09-03 13:39:43

如果我能做到这一点,我如何从JavaScript代码中调用Java代码(例如方法),在Wicket中。


答案 1

呃。正确的答案是ajax回拨。您可以手动编码 js 以挂接到 wicket js 中,也可以在 java 中设置 wicket 组件的回调。例如,来自AjaxLazyLoadPanel:

        component.add( new AbstractDefaultAjaxBehavior() {

        @Override
        protected void respond(AjaxRequestTarget target) {
            // your code here
        }

        @Override
        public void renderHead(IHeaderResponse response) {
            super.renderHead( response );
            response.renderOnDomReadyJavascript( getCallbackScript().toString() );
        }

        }

此示例演示如何将回调代码添加到 Wicket 中的任何组件。在浏览器中触发 OnDomReady 事件后,当加载页面时,Wicket 将导致其 js enging,使用 Ajax 回调到您的代码中,以调用上面显示的 'respond' 方法,此时您可以在服务器上执行 Java 代码,并可能将组件添加到要重新呈现的 ajax 目标。

要手动执行此操作,从js,您可以通过将getCallbackScript().toString()打印到检票口组件上的属性来挂接到检票口的系统,然后您可以从js访问该属性。使用 wicket 的 wicketAjaxGet 从 wicket-ajax 手动从 js 调用此 url.js。

查看邮件列表,了解有关此主题的大量对话:http://www.nabble.com/Wicket-and-javascript-ts24336438.html#a24336438


答案 2

摘自 https://cwiki.apache.org/WICKET/calling-wicket-from-javascript.html

如果您将任何将 AbstractDefaultAjaxBehavior 扩展到您的页面的类,wicket-ajax.js 将被添加到您的网页标题中。wicket-ajax.js为您提供了两种基本方法来调用您的组件:

function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel)

function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel)

下面是一个示例:

JavaScript

function callWicket() {
   var wcall = wicketAjaxGet('$url$' + '$args$', function() { }, function() { });
}

$url$是从方法 中获得的。如果将从该方法返回的 String 粘贴到浏览器中,则会调用 respond 方法,这同样适用于 javascript 方法。abstractDefaultAjaxBehavior.getCallbackUrl()

您可以选择通过将参数追加到 URL 字符串来添加参数。它们的形式是 。&foo=bar

您可以在Java响应方法中获得可选参数,如下所示:

Map map = ((WebRequestCycle) RequestCycle.get()).getRequest().getParameterMap();

或者这个:

String paramFoo = RequestCycle.get().getRequest().getParameter("foo");