JSF 2.0 ViewExpiredException

Я использовал 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)
  • Введите имя пользователя/пароль
  • Нажмите кнопку входа
  • Перезагрузка страницы с пустой формой входа
  • Перезагрузить страницу
  • Страница показывает приветствие, и форма входа не отображается (ожидаемое поведение)

person Alexandre Lavoie    schedule 14.07.2011    source источник
comment
Почему вы не можете перенести приложение на JSF 2.0? stackoverflow .com/questions/4441713/   -  person javing    schedule 20.10.2011
comment
Я уже перешел на JSF 2.0, но решение, которое было у меня в 1.2, больше не работает!   -  person Alexandre Lavoie    schedule 09.11.2011


Ответы (1)


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

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

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

Вот такая статья описание того, как это реализовать.

person Albert Gan    schedule 08.11.2011
comment
Конечно, это хороший способ, но в контексте экрана входа в систему, который вы открыли в браузере только дольше, чем тайм-аут, когда вы заполняете поля имени пользователя/пароля и нажимаете кнопку входа, он превращается в ViewExpiredException.. . - person Alexandre Lavoie; 09.11.2011