単純なHTTPリダイレクトを実装するのに問題があります。私はLiferayの6.0.6を使用LiferayポートレットとJSF:レンダリングフェーズ中にリダイレクト
、私たちのポートレットは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のSessionを必要とする
は、この問題を解決するために、あなたのアイデアをお持ちですか?
ありがとう!
ps:<redirect />
または?faces-redirect
ポートレットでは機能しません。
ありがとう、あなたの説明をありがとう。私は別の解決策を考え、必要に応じてポートレットのアーキテクチャをリファクタリングします。 –
別の_hacky_回避策は、PortalUtil.getHttpServletResponseを使用して元のHTTP要求を検索し、そこでsendRedirectを使用することです。 –
@TobiasLiefke * too hacky IMHO - レンダリング中に応答が既にコミットされている可能性があります。あるいは、ポートレットはAjaxを通じて配信されるかもしれません。ページ全体の一部としてではありません。それはうまくいくかもしれませんが、今でも動くかもしれないし、将来のアプリケーションサーバーのアップデートで中断するかもしれません... –