JSF 2.0 ViewExpiredException - PullRequest
       52

JSF 2.0 ViewExpiredException

2 голосов
/ 14 июля 2011

Я использую JSF 1.2 с ViewHandler, описанным в этом ответе: Окончание сеанса IceFaces вызывает исключение это было очень полезно, потому что, когда возникает исключение, страница автоматически восстанавливается, что хорошо для общедоступных страниц,Проблема в том, что он не совместим с JSF 2.0.У кого-нибудь есть идеи, как заставить его работать в JSF 2.0 или замене?

Редактировать:

Я нашел это решение: JSF без сохранения состояния , но все еще задаюсь вопросом, есть ли способ сделать это с помощью ViewHandler, как я делал в JSF 1.2.Вот мой текущий код JSF 2.0:

public class AutoRegeneratorViewHandler extends GlobalResourcesViewHandler
{
    public AutoRegeneratorViewHandler(ViewHandler viewHandler)
    {
        super(viewHandler);
    }

    @Override
    public UIViewRoot restoreView(FacesContext p_oContext, String p_sViewID)
    {
         UIViewRoot oViewRoot = super.restoreView(p_oContext,p_sViewID);

         try
         {
             if(oViewRoot == null)
             {          
                 initView(p_oContext);

                 oViewRoot = createView(p_oContext,p_sViewID);
                 p_oContext.setViewRoot(oViewRoot);

                 try
                 {
                     renderView(p_oContext,oViewRoot);
                 }
                 catch(IOException e)
                 {
                     e.printStackTrace();
                 }

                 System.out.println("Created : " + p_sViewID);
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

        return oViewRoot;
    }
}

Этот код избавляется от ViewExpiredException, но когда страница загружена, я выхожу не зарегистрированным.

Тестовый пример:

  • Открытие веб-сайта
  • Ожидание, превышающее время истечения текущего сеанса (с web.xml)
  • Введите имя пользователя / пароль
  • Нажмите кнопку входа
  • Перезагрузка страницы с пустой формой входа
  • Перезагрузка страницы
  • Отображение страницы Приветствие и форма входа не отображается (ожидаемое поведение)

1 Ответ

1 голос
/ 08 ноября 2011

Я думаю, что способ JSF2 - предоставить собственный обработчик исключений.

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

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

Вот такая статья , описывающая, как ее реализовать.

...