code: @Override
  	public void serviceRequest(final Request request) {
  
  		// Get expected step count
  		UIContext uic = UIContextHolder.getCurrent();
  		int expected = uic.getEnvironment().getStep();
  
  		// Get step count from the request
  		int got = StepCountUtil.getRequestStep(request);
  
  		// Match (first time, both are zero)
  		// or no Step count and processing a GET
  		if (expected == got || (!StepCountUtil.isStepOnRequest(request) && "GET".equals(request.
  				getMethod()))) {
  			// Process Service Request
  			getBackingComponent().serviceRequest(request);
  		} else { // Invalid step
  			LOG.warn(
  					"SERVER: Wrong step detected. Expected step " + expected + " but got step " + got);
  
  			// Redirect to error page
  			if (StepCountUtil.isErrorRedirect()) {
  				String url = StepCountUtil.getErrorUrl();
  				LOG.warn("User will be redirected to an error page. URL: " + url);
  				try {
  					getResponse().sendRedirect(url);
  				} catch (IOException e) {
  					LOG.warn("Error trying to redirect for wrong step indicator.");
  				}
  
  				// Make sure the render phase is not processed
  				throw new ActionEscape();
  			} else {  // Warp to the future
  				// Call handle step error
  				WComponent application = getUI();
  				if (application instanceof WApplication) {
  					LOG.warn("The handleStepError method will be called on WApplication.");
  					((WApplication) application).handleStepError();
  				}
  
  				LOG.warn("The render phase will warp the user back to the future.");
  			}
  		}
  	}
docs: Override to check whether the step variable in the incoming request matches what we expect.
  
  @param request the request being serviced.