11

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";
}

これは単なるテストですが、実際に使用したいオブジェクトはもっと複雑です。

フラッシュを使用した2ページ目は次のとおりです。

<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>

この場合、フラッシュスコープは正常に機能し、メッセージが表示されます。

しかし、ナビゲーションケースにリダイレクトを追加すると、フラッシュマップ内のオブジェクトが消えてしまいます。

ナビゲーションルールでリダイレクトを使用できない理由がわかりません(フラッシュスコープの目標であると信じていました)。

私のコードに何か問題がある可能性があります。

誰かが私を助けることができますか?

ありがとう

4

2 に答える 2

14

MojarraによるJSF2Flashスコープの実装には多くの問題がありました。それらのほとんどは、Mojarraの新しいリリースごとに解決されました。現在、最新のMojarraバージョンである2.1.6では、私が知る限り、未解決の大きな問題が1つだけあります。それは、別のベースパスにリダイレクトすると機能しないということです。1751号の長い議論の(現在の)最後のコメントも参照してください。

現在、基本的に次のオプションがあります。

  1. 別のベースパスにリダイレクトする必要がある場合は、Flashの使用を忘れてください。代わりにリクエストパラメータを使用するか、カスタムCookieを使用してフラッシュスコープをシミュレートしてみてください。

  2. 可能であれば、フラッシュスコープが存続する必要があるときに別のベースパスにリダイレクトする必要がないように、フォルダ構造を再編成します。

  3. Mojarraの代わりにMyFacesを試してください。多分それはフラッシュスコープに関してそれをより良くします。


更新問題2136に従って、別のパスでのリダイレクト後にFlashスコープが使用できないという最後の未解決の問題は、間もなく登場するMojarra2.1.14で解決されます。したがって、このバージョンでは、これまでに発見されて開かれているすべてのFlashスコープ関連の問題を解決して閉じる必要があります。

于 2012-02-06T03:33:49.123 に答える
2

NetBeansを使用するjsf2.1には、フラッシュに関するこの問題があります。使用/somepage?redirect-faces=true or /somedirectory/somepage?faces-redirect=true は機能しません。それはでなければなりませんsomepage?redirect-faces=true

mojarra 2.1.7をテストしましたが、上記の問題はありませんでした。

于 2012-04-01T22:18:19.670 に答える