我在实现简单的HTTP重定向时遇到问题。
我使用Liferay 6.0.6,我们的 portlet 是使用 JSF2.0 /PortletFaces构建的。
我想在加载 View 时(而不是在触发操作时)调用重定向。当前,我的函数由PreRenderView监听器调用。
<f:metadata>
<f:event listener="#{myControler.dispatch}" type="preRenderView" />
</f:metadata>
在此功能中,我可以检查权限,执行其他操作,并且在某些情况下,我想将用户重定向到新页面(而不是其他 View )。
我尝试了几种方法,均未成功。
具体来说,我认为这种方法可以工作:
getFacesContext().getExternalContext().redirect(url);
getFacesContext().responseComplete()
// => Can only redirect during ACTION_PHASE
此错误是合乎逻辑的,但是可以解决强制重定向。
可以在另一个函数中实现,否则调用,我只需要Hibernate Session(在渲染阶段开始时设置)
您有解决此问题的想法吗?
谢谢!
ps:
<redirect />
或?faces-redirect
不适用于portlet。 最佳答案
您无法通过设计在渲染阶段执行此操作。原因:
一个棘手的解决方法是呈现一些javascript重定向,但这是类似于veeeery的非门户网站,并且可能破坏其他人的期望(此外,页面的某些部分可能已经呈现,导致您的用户填写表格仅由您重定向javascript例程。
请重新考虑问题并提出其他解决方案-在门户网站环境中这样做确实值得。
关于redirect - Liferay Portlet和JSF : Redirect during Render Phase,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6878828/