我有一个问题来实现一个简单的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提供,甚至不是整个页面的一部分。它可能工作,但它现在也可能工作,并在应用程序服务器的将来更新中断... –