gpt4 book ai didi

redirect - Liferay Portlet和JSF : Redirect during Render Phase

转载 作者:行者123 更新时间:2023-12-04 17:27:12 29 4
gpt4 key购买 nike

我在实现简单的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。

最佳答案

您无法通过设计在渲染阶段执行此操作。原因:

  • Portlet可能是异步呈现的,因此在呈现Portlet时可能已经显示了页面
  • 页面的某些部分可能已经交付给客户端,因此HTTP header 已经发送了-出于这个原因,由于设计原因,您在呈现阶段无法访问它们
  • 如果在同一页面上呈现的两个portlet决定要转发到另一个页面,那么预期的结果是什么?谁会赢?

  • 一个棘手的解决方法是呈现一些javascript重定向,但这是类似于veeeery的非门户网站,并且可能破坏其他人的期望(此外,页面的某些部分可能已经呈现,导致您的用户填写表格仅由您重定向javascript例程。

    请重新考虑问题并提出其他解决方案-在门户网站环境中这样做确实值得。

    关于redirect - Liferay Portlet和JSF : Redirect during Render Phase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6878828/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com