NavigationHandler.handleNavigation() очищает флэш-память?
Я использую JSF2.0 Mojarra 2.0.2.
У меня есть метод, который выходит из системы пользователя и помещает сообщение о выходе из системы во флэш-памяти, перенаправляя на страницу входа в систему (которая имеет div, который распечатывает флэш-память). Однако, когда я по какой-то причине использую метод handleNavigation navigationHandlers, флэш-память не отображается. У меня есть аналогичный метод, который перенаправляет пользователя на страницу входа, если он / она не вошел в систему.
Если я выполняю навигацию по ссылке h: и просто вызываю метод выхода из системы напрямую, флэш-память отображается как обычно, но если я использую метод handleNavigation(), флэш-память по какой-то причине очищается.
Код в вопросе:
public void performLogout()
{
getFacesContext().getExternalContext().invalidateSession();
setCurrentUser(null);
getFlash().put("notice", "Successfully logged out.");
super.getFacesContext().getApplication().getNavigationHandler()
.handleNavigation(getFacesContext(), null, "login");
}
Есть ли способ удержать вспышку при такой навигации?
Благодарю.
Редактировать: я полагаю, что эта проблема связана с другой проблемой, связанной с тем, что флэш-память не сохраняется во время перенаправлений, когда страницы xhtml находятся в разных каталогах: http://java.net/jira/browse/JAVASERVERFACES-1635
1 ответ
Ты прав.
Область флеш-памяти JSF 2 в настоящее время очень глючная, и, основываясь на спецификации, она, вероятно, останется практически непригодной для использования: http://javaserverfaces.java.net/nonav/docs/2.0/javadocs/index.html
Если вы хотите, чтобы флеш-область работала следующим образом, рассмотрите возможность использования CDI и флеш-области из Seam Faces - http://docs.jboss.org/seam/3/faces/reference/snapshot/en-US/html_single/
"Область флеш-памяти должна быть активной с момента помещения объекта в область до момента, когда ответ завершил рендеринг".
--Lincoln