Объект в области видимости Flash недоступен после перенаправления
У меня возникло недоразумение с использованием области видимости flash в jsf 2. Я хочу поместить объект на карту флэш-памяти во время моего действия и показать этот объект на следующей странице. Вот мое действие (вызов h:commandLink):
public String showDetail(PersonneDTO personne) {
MessageFlashBean message = new MessageFlashBean();
message.addMessage("test");
FacesContext.getCurrentInstance().getExternalContext().getFlash()
.put("test", message);
return "showDetail";
}
Это всего лишь тест, но реальный объект, который я хочу использовать, является более сложным.
Вот вторая страница с использованием вспышки:
<ui:fragment rendered="#{flash.test != null and flash.test.hasMessage()}" >
<ui:repeat var="message" value="#{flash.test.messages}">
#{message}
</ui:repeat>
</ui:fragment>
Вот навигация (и вот моя проблема:)):
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>showDetail</from-outcome>
<to-view-id>/private/showDetail.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
В этом случае флеш-область работает нормально, и мое сообщение появляется.
Но если я добавлю редирект в случае навигации, мой объект на карте флэш исчезнет.
Я не понимаю, почему я не могу использовать перенаправление в правиле навигации (я полагал, что это была цель области видимости).
Может быть, что-то не так в моем коде.
Кто-то может мне помочь?
Спасибо
2 ответа
У реализации Mojarra области JSF2 Flash было много проблем. Большинство из них были решены с каждым новым выпуском Mojarra. В настоящее время, с последней версией Mojarra, 2.1.6, насколько я знаю, есть только одна главная открытая проблема: она не будет работать, если вы перенаправите на другой базовый путь. См. Также (в настоящее время) последний комментарий в длительной дискуссии в выпуске 1751.
Прямо сейчас у вас есть в основном следующие варианты:
Забудьте об использовании Flash, когда вам нужно перенаправить на другой базовый путь. Вместо этого используйте параметр запроса или попробуйте смоделировать объем флеш-памяти с помощью специального файла cookie.
Если возможно, реорганизуйте структуру папок так, чтобы вам не нужно было перенаправлять на другой базовый путь, когда вам нужна область флеш-памяти для выживания.
Попробуйте MyFaces вместо Мохарры. Может быть, он делает это лучше в отношении объема вспышки.
Обновление: согласно проблеме 2136, последняя открытая проблема с областью Flash, недоступной после перенаправления по другому пути, решена в скором выпуске Mojarra 2.1.14. Таким образом, с этой версией все проблемы, связанные с областью Flash, обнаруженные и открытые, должны быть решены и закрыты.
JSF 2.1 с NetBeans имеет эту проблему с Flash. с помощью /somepage?redirect-faces=true or /somedirectory/somepage?faces-redirect=true
не работает. должно быть somepage?redirect-faces=true
,
протестировал моджарру 2.1.7, но у него не было вышеуказанной проблемы.