Объект в области видимости Flash недоступен после перенаправления - PullRequest
11 голосов
/ 05 февраля 2012

У меня возникло недоразумение с использованием flash scope в 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>

В этом случае прицел работает нормально, и появляется мое сообщение.

Но если я добавлю перенаправление в навигационный блок, мой объект на флэш-карте исчезнет.

Я не понимаю, почему я не могу использовать перенаправление в правиле навигации (я полагал, что это была цель области видимости flash).

Может быть, что-то не так в моем коде.

Кто-нибудь может мне помочь?

Спасибо

Ответы [ 2 ]

14 голосов
/ 06 февраля 2012

У реализации Mojarra области JSF2 Flash было много проблем . Большинство из них были решены с каждым новым выпуском Mojarra. В настоящее время, с последней Моджаррской версией , 2.1.6, насколько я знаю, есть только одна серьезная открытая проблема: она не будет работать, если вы перенаправите на другой базовый путь. См. Также (в настоящее время) последний комментарий в длительной дискуссии в выпуске 1751 .

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

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

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

  3. Попробуйте MyFaces вместо Мохарры. Может быть, это лучше с точки зрения объема вспышки.


Обновление : в соответствии с выпуском 2136 , последняя проблема с открытой областью Flash-области недоступна после того, как перенаправление по другому пути решено в ближайшей версии Mojarra 2.1 +0,14 . Итак, с этой версией, all Проблемы, связанные с областью Flash, обнаружены и открыты до сих пор. должны быть решены и закрыты.

2 голосов
/ 02 апреля 2012

jsf 2.1 с netbeans имеет эту проблему со вспышкой. использование /somepage?redirect-faces=true or /somedirectory/somepage?faces-redirect=true не работает. должно быть somepage?redirect-faces=true.

протестировал моджарру 2.1.7, но у него не было вышеуказанной проблемы.

...