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

时间:2020-03-06 15:01:57  来源:igfitidea点击:

如果可以的话,如何在Wicket的JavaScript代码中调用Java代码(例如方法)。

解决方案

假设意思是JavaScript在客户端上运行,则导致对服务器进行HTTP重定向,并使servlet对给定URL的请求做出反应。

这被称为Ajax,并且有许多库可以做到这一点。

http://www.wicket-library.com/wicket-examples-6.0.x/index.html/上有许多示例可以入门。

或者看看DWR

http://directwebremoting.org/

DWR允许浏览器中的Javascript与服务器上的Java交互,并处理带有结果的网页。

正如Dorward所提到的,这是通过AJAX完成的

er正确的答案应该是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进行处理,并使用Ajax回调到上面显示的" respond"方法,此时我们可以在服务器,并可能将组件添加到要重新呈现的ajax目标中。

要从js手动进行操作,我们可以通过将getCallbackScript()。toString()打印到wicket组件上的属性上,从而进入wicket的系统,然后我们就可以从js访问它。使用wicket的wicketAjaxGet从wicket-ajax.js手动从js调用此url。

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

摘录自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 $是从方法AbstractDefaultAjaxBehavior.getCallbackUrl()获得的。如果将从该方法返回的String粘贴到浏览器中,则将调用response方法,同样适用于javascript方法。

我们可以选择将参数添加到URL字符串中来添加参数。它们采用&foo = bar的形式。

我们会在Java响应方法中获得可选参数,如下所示:

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

或者这个:

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