我有一個問題來實現一個簡單的HTTP重定向。Liferay Portlet和JSF:在渲染階段重定向
我使用的Liferay 6.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的Session(設置在呈現階段的開始)
有你的想法來解決這個問題呢?
謝謝!
ps:<redirect />
或?faces-redirect
不適用於portlet。
謝謝你的解釋。我會考慮另一種解決方案,並在必要時重構我的portlet體系結構。 –
另一個_hacky_解決方法是使用PortalUtil.getHttpServletResponse查找原始HTTP請求並在那裏使用sendRedirect。 –
@TobiasLiefke * too * hacky恕我直言 - 響應可能已經在渲染期間提交。或者,portlet可能通過Ajax提供,甚至不是整個頁面的一部分。它可能工作,但它現在也可能工作,並在應用程序服務器的將來更新中斷... –