从Javascript调用Wicket代码 [英] Call Wicket Code from Javascript

查看:85
本文介绍了从Javascript调用Wicket代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正试图从Wicket中的Javascript调用一些Java代码。

I'm trying to call some Java code from Javascript in Wicket.

这是我的Java代码:

This is my Java code:

public ShowUnternehmen() {

    add(new AbstractDefaultAjaxBehavior() {
        @Override
        protected void respond(AjaxRequestTarget ajaxRequestTarget) {
            System.out.println("respond");
        }

        @Override
        public void renderHead(Component component, IHeaderResponse response) {
            super.renderHead( component, response );
            System.out.println(getCallbackUrl());
        }
    });

}

这是Javascript代码:

And this is the Javascript code:

<wicket:head>
    <script type="text/javascript" >
        $(function() {
            $.contextMenu({
                selector: '.context-menu-one',
                callback: function(key, options) {
                    var m = "clicked: " + key;
                    alert("BLA");
                    Wicket.Ajax.get({"u":"./com.emg.panels.unternehmen.ShowUnternehmen?1-1.IBehaviorListener.0-"})
                },
                items: {
                    "edit": {name: "Editieren", icon: "edit"},
                    "quit": {name: "Abbrechen", icon: function(){
                        return 'context-menu-icon context-menu-icon-quit';
                    }}
                }
            });

            $('.context-menu-one').on('click', function(e){
                console.log('clicked', this);
            })
        });
    </script>
</wicket:head>

但是从不执行响应方法。我正在查看其他示例,但它们似乎都令人困惑。

But the response method is never executed. I was looking at other examples but they all seem to be confusing.

我从renderHead方法获取此URL

I got this url from renderHead method

推荐答案

你的方式很好。如果让wicket将回调函数呈现给页面,那将更加可靠。以下两个示例显示了如何执行此操作:

You are on a good way. It would be more relalible if you let wicket render the callback function to the page. The following two examples show how you can do that:

A)呈现全局回调函数。缺点是你将只有一个回调端点。

(1)创建如下行为:

public class CallFromJavascriptBehavior extends AbstractDefaultAjaxBehavior {
@Override
protected void respond(AjaxRequestTarget target) {
    final StringValue parameterValue = RequestCycle.get().getRequest().getQueryParameters().getParameterValue("yourName");
    System.out.println(String.format("Hello %s", parameterValue.toString()));
}

@Override
public void renderHead(Component component, IHeaderResponse response) {
    super.renderHead(component, response);
    response.render(JavaScriptHeaderItem.forScript(String.format("nameOfFunction=%s", getCallbackFunction(CallbackParameter.explicit("yourName"))), "CallFromJavascriptBehavior"));
}}

(2)将此行为添加到您的wicket页面。

(2) Add this behavior to your wicket page.

(3)现在你可以调用nameOfFunction('Markus');来自您的javascript。

(3) Now you can call nameOfFunction('Markus'); from your javascript.

B)在页面上为您的组件的每个实例调用初始化函数。

(1)在页面上添加初始化功能

(1) add a initialisation function to your page

<script>
    function initMyComponent(selector, callback){
        $(selector).click(function(){
            callback("Markus");
        });
    }
</script>

(2)创建类似以下的行为,调用初始化函数并传递必要的选择器和回调函数。

(2) Create a behavior like the following which calls the initialisation function and passes the necessary selector and callback function.

public class ComponentBehavior extends AbstractDefaultAjaxBehavior{
@Override
protected void respond(AjaxRequestTarget target) {
    final StringValue parameterValue = RequestCycle.get().getRequest().getQueryParameters().getParameterValue("yourName");
    System.out.println(String.format("Hello %s", parameterValue.toString()));
}

@Override
public void renderHead(Component component, IHeaderResponse response) {
    super.renderHead(component, response);
    response.render(OnDomReadyHeaderItem.forScript(String.format("initMyComponent('#%s', %s)", component.getMarkupId(), getCallbackFunction(CallbackParameter.explicit("yourName")))));
}}

(3)将行为添加到wicket组件。

(3) Add the behavior to your wicket component.

如果没有调用响应方法,则可能有不同的原因。您应该首先检查您的控制台(ide和浏览器)。

If the response method did not get called this could have different reasons. You should check your console (ide and browser) first.

这篇关于从Javascript调用Wicket代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆