Spring Portal MVC Clear Action Исключение собирается на этапе рендеринга - PullRequest
0 голосов
/ 29 декабря 2011

Я хотел бы знать, возможно ли исключить исключение из запроса при попытке перейти на фазу рендеринга после того, как фаза действия вызвала исключение.

Если вы посмотрите на этот фрагмент кода из метода doRenderService DispatchPortlet.class (класс, предоставляемый Spring):

PortletSession session = request.getPortletSession(false);
if (session != null) {
    if (request.getParameter(ACTION_EXCEPTION_RENDER_PARAMETER) != null) {
        Exception ex = (Exception)        
        session.getAttribute(ACTION_EXCEPTION_SESSION_ATTRIBUTE);
        if (ex != null) {
            logger.debug("Render phase found exception caught during action phase - rethrowing it");
            throw ex;
        }
     }
     else {
         session.removeAttribute(ACTION_EXCEPTION_SESSION_ATTRIBUTE);
     }
}

Здесь вы можете видеть, что исключение помещается в карту параметров, и, похоже, нет никакого способа его очистить.

То, что я хотел бы сделать, это сначала поймать исключение (что я успешно делаю), отобразить «страницу ошибок» (что я успешно делаю), а затем отобразить кнопку на этой странице ошибок, которая позволяет пользователю выводить снова откройте страницу «Фаза рендеринга», чтобы он / она снова могли попробовать их действие.

Я пытался создать фильтр, перехватчик, новый контроллер для очистки параметра, но кажется, что ParameterMap является UnmodifiableCollection.

Есть мысли?

Ответы [ 2 ]

0 голосов
/ 24 октября 2013

Вы можете настроить org.springframework.web.portlet.DispatcherPortlet с помощью setForwardActionException(false).Это препятствует тому, чтобы весна добавила детали Исключения в параметры рендеринга или сеанс.

0 голосов
/ 29 декабря 2011

Я действительно смог понять это, выполнив следующие действия в фильтре фазы рендеринга:

session.setAttribute(ACTION_EXCEPTION_SESSION_ATTRIBUTE, null)
...