Tôi gặp sự cố khi triển khai chuyển hướng HTTP đơn giản.Porter Liferay và JSF: Chuyển hướng trong giai đoạn Render
tôi sử dụng Liferay 6.0.6, chúng tôi portlet được xây dựng với JSF2.0/PortletFaces.
Tôi muốn gọi chuyển hướng khi lượt xem được tải (chứ không phải khi một hành động được kích hoạt). Hiện tại, chức năng của tôi được gọi bởi trình nghe PreRenderView.
<f:metadata>
<f:event listener="#{myControler.dispatch}" type="preRenderView" />
</f:metadata>
Trong chức năng này, tôi có thể kiểm tra quyền, làm công cụ khác và trong một số trường hợp tôi muốn chuyển hướng người dùng đến trang mới (không phải một chế độ xem khác).
Tôi đã thử một số phương pháp, không thành công. Cụ thể, tôi nghĩ rằng phương pháp này sẽ làm việc:
getFacesContext().getExternalContext().redirect(url);
getFacesContext().responseComplete()
// => Can only redirect during ACTION_PHASE
Lỗi này là hợp lý, nhưng là có một giải pháp cho lực chuyển hướng.
Nó có thể được thực hiện trong chức năng khác, được gọi bằng cách khác, tôi chỉ cần Hibernate Session (bộ vào đầu Render Phase)
Có bạn những ý tưởng để giải quyết vấn đề này?
Cảm ơn!
ps: <redirect />
hoặc ?faces-redirect
không hoạt động với các portlet.
Cảm ơn bạn đã giải thích.Tôi sẽ nghĩ đến một giải pháp khác, và cấu trúc lại kiến trúc portlet của tôi nếu cần thiết. –
Một giải pháp khác của _hacky_ là sử dụng PortalUtil.getHttpServletResponse để tìm yêu cầu HTTP ban đầu và sử dụng sendRedirect tại đó. –
@TobiasLiefke * quá * hack IMHO - phản hồi có thể đã được cam kết trong thời gian hiển thị. Hoặc portlet có thể được gửi qua Ajax, thậm chí không phải là một phần của toàn bộ trang. Nó có thể hoạt động, nhưng nó cũng có thể hoạt động ngay bây giờ và phá vỡ một số bản cập nhật trong tương lai của máy chủ ứng dụng ... –