Объект в области видимости 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.

Прямо сейчас у вас есть в основном следующие варианты:

  1. Забудьте об использовании Flash, когда вам нужно перенаправить на другой базовый путь. Вместо этого используйте параметр запроса или попробуйте смоделировать объем флеш-памяти с помощью специального файла cookie.

  2. Если возможно, реорганизуйте структуру папок так, чтобы вам не нужно было перенаправлять на другой базовый путь, когда вам нужна область флеш-памяти для выживания.

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

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