code: @Override
  	public void serviceRequest(final Request request) {
  		String triggerId = request.getParameter(WServlet.AJAX_TRIGGER_PARAM_NAME);
  
  		AjaxOperation ajaxOperation = AjaxHelper.getCurrentOperation();
  		if (ajaxOperation == null) {
  			throw new IllegalStateException(
  					"No AJAX operation available for trigger " + triggerId + ".");
  		}
  
  		ComponentWithContext triggerWithContext = AjaxHelper.getCurrentTriggerAndContext();
  		if (triggerWithContext == null) {
  			throw new IllegalStateException(
  					"No component/context available for AJAX trigger " + triggerId + ".");
  		}
  
  		UIContext uic = UIContextHolder.getCurrent();
  
  		// Reset the focus for this new request.
  		uic.setFocussed(null, null);
  
  		// We've hit the action phase, so we do want focus on this app.
  		uic.setFocusRequired(true);
  
  		// Process trigger only
  		if (isProcessTriggerOnly(triggerWithContext, ajaxOperation)) {
  			// Get user context
  			UIContext tuic = triggerWithContext.getContext();
  			UIContextHolder.pushContext(tuic);
  			try {
  				WComponent trigger = triggerWithContext.getComponent();
  				trigger.serviceRequest(request);
  				// Manually invoke laters as the InvokeLaters in the service request is not run due to the trigger
  				// having a "parent"
  				tuic.doInvokeLaters();
  			} finally {
  				UIContextHolder.popContext();
  			}
  		} else if ("GET".equals(request.getMethod())) { // GET only supports the above scenarios
  			throw new IllegalStateException(
  					"GET is not supported for the AJAX trigger " + triggerId + ".");
  		} else {
  			// service the request
  			super.serviceRequest(request);
  		}
  	}
docs: {@inheritDoc}