単純なHTTPリダイレクトを実装するのに問題があります。
私はLiferay6.0.6を使用していますが、ポートレットはJSF2.0 / PortletFacesで構築されています。
ビューがロードされたときに(アクションがトリガーされたときではなく)リダイレクトを呼び出したい。現在、私の関数はPreRenderViewリスナーによって呼び出されています。
<f:metadata>
<f:event listener="#{myControler.dispatch}" type="preRenderView" />
</f:metadata>
この関数では、権限を確認したり、他のことを実行したりできます。場合によっては、ユーザーを新しいページ(別のビューではない)にリダイレクトしたいこともあります。
私はいくつかの方法を試しましたが、失敗しました。具体的には、この方法が機能すると思いました:
getFacesContext().getExternalContext().redirect(url);
getFacesContext().responseComplete()
// => Can only redirect during ACTION_PHASE
このエラーは論理的ですが、リダイレクトを強制するための解決策があります。
これは、別の方法で呼び出される別の関数で実現できます。必要なのは、Hibernateセッション(レンダリングフェーズの開始時に設定)のみです。
この問題を解決するためのアイデアはありますか?
ありがとう!
ps:<redirect />
または?faces-redirect
、ポートレットを操作しません。