Объект в области 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, но у него не было вышеуказанной проблемы.