public function dispatch($action, Sonata_TemplateView $templateView)
 {
     $this->preDispatch();
     if (in_array($action, get_class_methods($this))) {
         $res = $this->{$action}();
         if (substr($action, -6) == 'Action') {
             if (is_null($res) || empty($res)) {
                 $res = self::ACTION_SUCCESS;
             }
             $templateViewName = null;
             $resource = $this->request->getParameter('resource');
             switch ($res) {
                 case self::ACTION_SUCCESS:
                     $templateViewName = substr($action, 0, strlen($action) - 6);
                     break;
                 case self::ACTION_FAILURE:
                     $templateViewName = 'Error';
                     $resource = null;
                     break;
                 default:
                     $templateViewName = $res;
                     break;
             }
             // Assign template vars
             $templateView->assign($this->varHolder->getAll());
             // Render template and save raw data
             $rawData = $templateView->render($templateViewName, $resource, $this->request->getParameter('format'));
             // Append raw data to response body
             $this->response->appendToBody($rawData);
         }
     } else {
         $this->__call($action, array());
     }
     $this->postDispatch();
 }