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