Объект в области 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>
В этом случае область флэш-памяти работает нормально, и появляется мое сообщение.
Но если я добавлю перенаправление в случае навигации, мой объект на карте флэш исчезнет.
Я не понимаю, почему я не могу использовать перенаправление в правиле навигации (я полагал, что это была цель флэш-области).
Может быть что-то не так в моем коде.
Кто-нибудь может мне помочь?
Спасибо
Ответы
Ответ 1
У реализации Mojarra JSF2 Flash scope было много проблем. Большинство из них были разрешены с каждым новым выпуском Mojarra. В настоящее время, с последней версией Mojarra, 2.1.6, там, насколько я знаю, остается только одна серьезная открытая проблема: она не будет работать, если вы перенаправите другой базовый путь. См. Также последний комментарий в текущем обсуждении в номере 1751.
Теперь у вас есть в основном следующие опции:
-
Забудьте использовать Flash, если вам нужно перенаправить на другой базовый путь. Вместо этого используйте параметр запроса или попытайтесь смоделировать область флэш-памяти с помощью настраиваемого файла cookie.
-
Если возможно, реорганизуйте структуру папок, чтобы вам не пришлось перенаправлять на другой базовый путь, когда вам нужна область флэш-памяти, чтобы выжить.
-
Попробуйте MyFaces вместо Mojarra. Возможно, он делает это лучше в отношении флэш-области.
Обновить: по вопросу 2136, последняя открытая проблема флэш-области недоступна после редиректа по другому пути в ближайшем будущем Mojarra 2.1.14. Таким образом, с этой версией все проблемы, связанные с Flash, обнаружены и открыты до сих пор
должны быть решены и закрыты.
Ответ 2
jsf 2.1 с netbeans эта проблема связана со вспышкой. использование /somepage?redirect-faces=true or /somedirectory/somepage?faces-redirect=true
не работает. он должен быть somepage?redirect-faces=true
.
проверено mojarra 2.1.7, но у него не было вышеуказанной проблемы.