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")); } }); 现在我的问题是: 解决方法
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).现在它的工作正确. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |