2012-01-27 1 views
1

phaselistener를 사용하여 사용자가 특수한 페이지에 액세스하는 것을 막으려 고 시도합니다. 그 이유는 그들이 어떤 페이지에 액세스하려고 하는지를 알아 내려고하기 때문입니다.JSF PhaseListener viewId가 항상 1보다 늦음

하지만 제 문제는 이전에 페이지를 가져 오는 것입니다. 실제 페이지가 아닙니다.

public void afterPhase(PhaseEvent event) 
{ 
    FacesContext fc = event.getFacesContext(); 
    System.out.println("test1" + fc.getViewRoot().getViewId()); 
} 

여기

public void afterPhase(PhaseEvent event) 
{ 
    FacesContext fc = event.getFacesContext(); 
    HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest(); 
    String uri = request.getRequestURI(); 

    System.out.println("uri: " + uri); 
} 

같은 이유 때문이다, 어떻게 내가는 사용자가 액세스하려고하는 페이지 이름을받을 수 있나요? 그들이 전에 한 걸음 더 나아가거나 더 나은 페이지를 올 필요가있는 사람은 아닙니다.

답변

4

이것은 HTTP POST 요청의 순서가 작동하기 때문에 한 걸음 뒤로입니다. 명령 단추를 통해 JSF 응용 프로그램을 탐색 할 때 각 요청은 게시 요청으로 진행됩니다. 사용자가 직접 브라우저의 주소 표시 줄에서 URL을 명중

  • 당신이 정확한보기 ID를 얻을 것보다

    일부 자원을 보호하고 있기 때문에

    은 HTTP GET을 통해 액세스 할 수 있습니다 있는지 확인이 달성 될 수있다.
  • jsf 앱 게시가 간단한 JSF 탐색 대신 리소스로 리디렉션됩니다. POST-REDIRECT-GET 패턴은이 모양에 속합니다. here.
  • 각 POST 후에 몇 가지 메시지가 표시되는 경우 JSF1.x의 새로운 기능인 Flash지도가 필요합니다. JSF1.x에 열심히 있다면 원하는 경우 플래시를 구현할 수 있습니다.

HTTP GET 요청에서보기 ID를 포착합니다.

희망 사항 ...

+0

즉, POST로 페이지 간 탐색을 수행하지 말고 GET으로 수행하십시오. http://stackoverflow.com/questions/4317684/when-should-i-use-houtputlink-instead-of-hcommandlink도 참조하십시오. – BalusC

관련 문제