如何在 Wicket 中从 JavaScript 代码调用 Java 代码?
如果我能做到这一点,我如何从JavaScript代码中调用Java代码(例如方法),在Wicket中。
如果我能做到这一点,我如何从JavaScript代码中调用Java代码(例如方法),在Wicket中。
呃。正确的答案是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
摘自 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");