2

これによると: http://java.net/jira/browse/JAVASERVERFACES-2136 flash-"scoped" メッセージは、別のパスのページへのリダイレクトを存続させる必要があります..アプリケーションでこのようなものを使用したかったので、ここから javax.faces-2.1.14-20121003.074348-10 スナップショットをダウンロードしました https://maven.java.net/content/repositories/snapshots/org/glassfish/javax.faces/2.1.14-SNAPSHOT/テストします。

私の状況は次のとおりです。ルートディレクトリにページ(test.xhtmlと呼びます)があり、コンストラクターの呼び出し中にビュースコープのバッキングBeanでチェックを行い、Omnifacesを使用して条件付きでメッセージを設定し、index.xthmlMessage.addFlashGlobalInfoにリダイレクトしますまた、Omnifaces を使用してルート ディレクトリにありますFaces.Redirect()(BalusC に感謝します!)。index.xhtml には Primefaces があります

<p:messages id="msg" showDetail="false" autoUpdate="true" />

上記と同じ「構成」を他のページでも使用していますが、Bean メソッドと呼ばれる同じページにリダイレクトが行われると正常に機能します。

したがって、メッセージは別のパスのリダイレクトを生き残るべきではありませんか、それともこの問題について何か誤解していましたか?? 多分ここに何か問題がありますか??

前もって感謝します!(私はこのところでBalusCの意見を聞くのを楽しみにしています:))

4

1 に答える 1

3

メッセージとリダイレクトを設定するinitメソッドを呼び出していましたが、再びメッセージが表示されません!! したがって、PostConstructも機能するとは思わない..

確かに、<f:event type="preRenderView">フラッシュ メッセージを設定するには遅すぎます。JSF が現在レンダリング レスポンス フェーズにある場合、フラッシュ スコープを作成できません。基本的に、レンダリング応答フェーズの前にフラッシュ メッセージを設定する必要があります。という名前にもかかわらずpreRenderView、このイベントは実際には、レンダリング レスポンス フェーズ (最初の段階) で発生します

レンダー レスポンス中に呼び出されていなければ、時間通りに実行される可能@PostConstruct 性があります。ただし、これは と一緒にはうまく機能しません。<f:viewParam>

これを修正するには、すでに OmniFaces を使用しているので、単に<f:event type="postInvokeAction">.

<f:metadata>
    <f:viewParam name="some" value="#{bean.some}" />
    <f:event type="postInvokeAction" listener="#{bean.init}" />
</f:metadata>

以下も参照してください。

于 2012-10-04T15:02:15.690 に答える