加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Wicket Ajax Keyevent

发布时间:2020-12-16 02:49:56 所属栏目:百科 来源:网络整理
导读:我是Wicket的新手,我想创建一个ajax-behavior,如果按下Functionkey,则调用我的 Javacode. 我的想法是创建一个向浏览器发送一些Javascript的行为,只有F-Key才会导致ajax回调. public class HomePage extends WebPage {public HomePage(final PageParameters p
我是Wicket的新手,我想创建一个ajax-behavior,如果按下Functionkey,则调用我的 Javacode.

我的想法是创建一个向浏览器发送一些Javascript的行为,只有F-Key才会导致ajax回调.

public class HomePage extends WebPage {
public HomePage(final PageParameters parameters) {
    super(parameters);

    add(new AbstractDefaultAjaxBehavior(){

        @Override
        protected void respond(AjaxRequestTarget target) {
            //retrieve the Parametervalue from request
            final Request request = RequestCycle.get().getRequest();
            final String jsKeycode = request.getRequestParameters()
                            .getParameterValue("keycode").toString("");

            //test output   
            target.appendJavaScript("alert('from wicket ajax. you pressed "+jsKeycode+"')");
        }

        @Override
        public void renderHead(Component component,IHeaderResponse response) {
            super.renderHead(component,response);

            //Append JavaScriptcode 
            response.render(OnDomReadyHeaderItem.forScript(
                    "nn" +
                    "$(document).keydown(" +
                        "function(event){n" + //120,121 Example for F9 and F10
                            "if((event.keyCode == 120) || (event.keyCode == 121)){n" + 
                                "event.preventDefault();n" +
                                "window.alert('F-Key pressed');n" +
                                //perform ajax-callback with keyCode
                            "}n" +
                        "});n"));   
        }
    });

现在我的问题是:
我需要编码,ajax回调将使用按下的键码作为参数执行?

解决方法

osmdamv给我提示为我的问题找到“Wicketsolution”.现在这里是我的代码捕获Keypress并仅在某些情况下发送ajaxrequest给wicketserver.

通过此示例,其他用户应该可以根据需要调整此代码.

public HomePage(final PageParameters parameters) {
    super(parameters);

    add(new AjaxEventBehavior("keydown"){
        @Override
        protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
            super.updateAjaxAttributes(attributes);

            IAjaxCallListener listener = new AjaxCallListener(){
                @Override
                public CharSequence getPrecondition(Component component) {
                    //this javascript code evaluates wether an ajaxcall is necessary.
                    //Here only by keyocdes for F9 and F10 
                    return  "var keycode = Wicket.Event.keyCode(attrs.event);" +
                            "if ((keycode == 120) || (keycode == 121))" +
                            "    return true;" +
                            "else" +
                            "    return false;";
                }
            };
            attributes.getAjaxCallListeners().add(listener);

            //Append the pressed keycode to the ajaxrequest 
            attributes.getDynamicExtraParameters()
                .add("var eventKeycode = Wicket.Event.keyCode(attrs.event);" +
                     "return {keycode: eventKeycode};");

            //whithout setting,no keyboard events will reach any inputfield
            attributes.setAllowDefault(true);
        }

        @Override
        protected void onEvent(AjaxRequestTarget target) {
            //Extract the keycode parameter from RequestCycle
            final Request request = RequestCycle.get().getRequest();
            final String jsKeycode = request.getRequestParameters()
                            .getParameterValue("keycode").toString("");

            target.appendJavaScript("alert('from wicket ajax. you pressed "+jsKeycode+"')");
        }
 });

编辑:

我插入attributes.setAllowDefault(true).现在它的工作正确.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读