// if you change the supported parameter classes, make sure to update the documentation on the
  // wiki
  private Object handleRequestWithController(PageContext context) throws PageAction {
    Map<Class<?>, Object> possibleArguments = new HashMap<Class<?>, Object>();
    possibleArguments.put(PageContext.class, context);
    possibleArguments.put(PageModel.class, context.getModel());
    possibleArguments.put(Model.class, context.getModel());
    possibleArguments.put(Map.class, context.getModel());
    possibleArguments.put(PageRequest.class, context.getRequest());
    possibleArguments.put(HttpServletRequest.class, context.getRequest().getRequest());
    possibleArguments.put(Session.class, context.getRequest().getSession());
    possibleArguments.put(ApplicationContext.class, applicationContext);
    possibleArguments.put(UiUtils.class, new PageUiUtils(context));
    if (possiblePageControllerArgumentProviders != null) {
      for (PossiblePageControllerArgumentProvider provider :
          possiblePageControllerArgumentProviders) {
        provider.addPossiblePageControllerArguments(possibleArguments);
      }
    }

    String httpRequestMethod = context.getRequest().getRequest().getMethod();
    return UiFrameworkUtil.executeControllerMethod(
        context.getController(), httpRequestMethod, possibleArguments, conversionService);
  }