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

Другие вопросы по тегам