15

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

4

4 回答 4

14

呃。正确的答案是 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 回调您的代码到上面显示的“响应”方法,此时您可以在服务器,并可能将组件添加到要重新渲染的 ajax 目标。

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

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

于 2009-07-18T07:15:04.790 回答
5

摘自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()。如果您将从该方法返回的字符串粘贴到浏览器中,您将调用响应方法,这同样适用于 javascript 方法。

您可以选择通过将参数附加到 URL 字符串来添加参数。他们采取的形式&foo=bar

您可以像这样在 Java 响应方法中获得可选参数:

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

或这个:

String paramFoo = RequestCycle.get().getRequest().getParameter("foo");
于 2010-08-26T04:59:12.873 回答
3

http://www.wicket-library.com/wicket-examples-6.0.x/index.html/有很多例子可以帮助你前进。

或者看看 DWR

http://directwebremoting.org/

DWR 允许浏览器中的 Javascript 与服务器上的 Java 交互,并帮助您使用结果操作网页。

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

于 2008-10-02T16:01:46.497 回答
0

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

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

于 2008-10-02T15:30:30.940 回答