간단한 HTTP 리디렉션을 구현하는 데 문제가 있습니다. Liferay 포틀릿 및 JSF : 렌더링 도중 리디렉션
나는 JSF2.0/ PortletFaces에 구축되어있는 Liferay 6.0.6, 우리의 포틀릿를 사용합니다.보기가로드 될 때 (작업이 트리거 될 때가 아니라) 리디렉션 을 호출하려고합니다. 현재, 내 기능은 PreRenderView 리스너에 의해 호출됩니다. 이 기능에
<f:metadata> <f:event listener="#{myControler.dispatch}" type="preRenderView" /> </f:metadata>
, 내가 다른 물건을 할, 권한을 확인 할 수 있으며, 어떤 경우에 나는 새 페이지 (다른보기)로 사용자를 리디렉션 할. 여러 방법을 시도했지만 실패했습니다. 은 특히,이 방법이 작동 것이라고 생각 :
getFacesContext().getExternalContext().redirect(url);
getFacesContext().responseComplete()
// => Can only redirect during ACTION_PHASE
이 오류는 논리적이지만, 힘 리디렉션에 대한 해결책이있다.
이 문제를 해결하기 위해 당신에게 아이디어를 가지고 최대 절전 모드 세션 (렌더링 단계의 시작 부분에 세트)가 필요합니다, 그렇지 않으면라는 다른 함수에서 실현 될 수
?
감사!
ps : <redirect />
또는 ?faces-redirect
은 포틀릿과 작동하지 않습니다.
당신의 설명에 감사드립니다.필요하다면 다른 솔루션으로 생각하고 내 포틀릿 아키텍처를 리팩터링합니다. –
또 다른 _hacky_ 해결 방법은 PortalUtil.getHttpServletResponse를 사용하여 원본 HTTP 요청을 찾고 sendRedirect를 사용하는 것입니다. –
@TobiasLiefke * too hacky IMHO - 응답이 이미 렌더링 시간 동안 커밋되었을 수 있습니다. 또는 포틀릿은 Ajax를 통해 전달 될 수 있으며 전체 페이지의 일부로 제공되지는 않습니다. 그것은 작동 할 수도 있지만, 그것은 또한 지금 작동하고 appserver의 미래의 업데이 트에서 휴식 수도 ... –