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