This is a slight extension of Passing HTTP parameters to Ajax callback methods to answer a specific usecase.
Stipulating that you have an element with wicket:id 'body':
From Java code able to access that element within scope:
//...(class declarations) final static String KEYPRESS_PARAM = "keyPressed"; //... private void handleA(){}//Desired behavior when 'a' is pressed on the client private void handleB(){}//Desired behavior when 'b' is pressed on the client public void someSetupMethod(){ body.add(new AjaxEventBehavior("onkeypress"){ @Override protected CharSequence getCallbackScript(boolean onlyTargetActivePage) { return generateCallbackScript("wicketAjaxGet('"+getCallbackUrl(onlyTargetActivePage)+"&"+KEYPRESS_PARAM+"='+wicketKeyCode(event)"); } @Override protected void onEvent(AjaxRequestTarget target) { String paramValue = RequestCycle.get().getRequest().getParameter(KEYPRESS_PARAM); try{//The key parameter is the pressed keychar's ascii value int key = Integer.parseInt(paramValue); switch(key){ case 'a': handleA(); break; case 'b': handleB(); break; } } catch(NumberFormatException e){//Catches the possibly null parameter, or malformation. return;//You might handle this a bit more responsibly. } } }); //... }