Tengo un problema para implementar una redirección HTTP simple.Liferay Portlet y JSF: Redirigir durante la fase de procesamiento
utilizo Liferay 6.0.6, nuestros portlets están construidas con JSF2.0/PortletFaces.
Quiero llamar a una redirección cuando se carga una vista (y no cuando se desencadena una acción). Actualmente, mi función es llamada por el oyente PreRenderView.
<f:metadata>
<f:event listener="#{myControler.dispatch}" type="preRenderView" />
</f:metadata>
En esta función, puedo comprobar los permisos, hacer otras cosas, y en algunos casos quiero redirigir al usuario a una página nueva (no otra vista).
Intenté varios métodos, sin éxito. Específicamente, pensé que este método funcionaría:
getFacesContext().getExternalContext().redirect(url);
getFacesContext().responseComplete()
// => Can only redirect during ACTION_PHASE
Este error es lógico, pero hay una solución para fuerza la redirección.
Podría ser realizado en otra función, llamada de otro modo, sólo necesito la Session de Hibernate (juego al comienzo de la fase de Render)
tiene ideas para resolver este problema?
Gracias!
ps: <redirect />
o ?faces-redirect
no funcionan con los portlets.
Gracias por su explicación.Pensaré en otra solución y refactorizaré la arquitectura de mi portlet si es necesario. –
Otra solución _hacky_ es usar PortalUtil.getHttpServletResponse para encontrar la solicitud HTTP original y usar sendRedirect allí. –
@TobiasLiefke * too * hacky En mi humilde opinión, es posible que la respuesta ya se haya cometido durante el tiempo de renderizado. O el portlet podría entregarse a través de Ajax, ni siquiera como parte de la página completa. Podría funcionar, pero también podría funcionar ahora y fallar en alguna actualización futura del servidor de aplicaciones ... –