Liferay Portlet 和 JSF:渲染阶段重定向
我在实现简单的 HTTP 重定向时遇到问题。
我使用 Liferay 6.0.6,我们的 portlet 是使用 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:
或 ?faces-redirect
不适用于 portlet。
I have a problem to implement a simple HTTP redirection.
I use Liferay 6.0.6, our portlets are build with JSF2.0 / PortletFaces.
I want to call a redirection when a view is loaded (and not when an action is triggered). Currently, my function is called by the PreRenderView listener.
<f:metadata>
<f:event listener="#{myControler.dispatch}" type="preRenderView" />
</f:metadata>
In this function, i can check the permissions, do other stuff, and in some cases I want to redirect the user to a new page (not another view).
I tried several methods, unsuccessfully.
Specifically, I thought that this method would work :
getFacesContext().getExternalContext().redirect(url);
getFacesContext().responseComplete()
// => Can only redirect during ACTION_PHASE
This error is logical, but is there a solution to force the redirection.
It could be realized in another function, called otherwise, I only need the Hibernate Session (set at the beginning of the Render Phase)
Have you ideas to resolve this problem?
Thanks!
ps : <redirect />
or ?faces-redirect
don't work with the portlets.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据设计,您不能在渲染阶段执行此操作。原因:
一个 hacky 的解决方法是渲染一些 javascript 重定向,但这非常不像门户,并且可能会扰乱其他人的期望(另外,页面的部分内容可能已经渲染,导致您的用户填写表单后只能被您的重定向) 。
请重新思考问题并提出不同的解决方案 - 在门户环境中这样做确实值得
You can't do this in the render phase by design. Reasons:
A hacky workaround is to render some javascript redirect, but this is veeeery un-portal-like and can mess up other's expectations (plus, parts of the page might already be rendered, causing your users to fill a form only to be redirected by your javascript routine.
Please rethink the problem and come up with a different solution - it's really worth doing this in a portal environment.
我使用这个并且它对我有用:
I use this and it works for me:
使用下面的方法就可以了
Use the below method it will work