2010-07-21 7 views
18

JSF 페이지를 지원하는 빈에서 요청 URL을 얻으려면 어떻게해야합니까? 나는 FacesContext의 문서를 통해 찾아 봤는데 내가 찾을 수있는 가장 좋은 방법은 정말 긴 것 같다JSF 빈에서 요청 URL을 가져 오겠습니까?

public String getRequestURL() 
{ 
    Object request = FacesContext.getCurrentInstance().getExternalContext().getRequest(); 
    if(request instanceof HttpServletRequest) 
    { 
      return ((HttpServletRequest) request).getRequestURL().toString(); 
    }else 
    { 
     return ""; 
    } 
} 

편집 : 기능 요구 사항 여기에서의 요구 사항은 우리가 자바 스크립트 유틸리티 타사의 전체 URL을 필요로한다는 것입니다. 유틸리티의 사용이나 아키텍처가 JSF와 잘 맞지 않지만이 호출이 부족한 부분이 있습니다. 발견 된 메서드는 작동하지만 FacesContext를 깊이 파고 들면 잘못되었습니다. 또한 JSF 표현식 언어로 호출 할 수있는 방법이 있기를 바랬습니다. JSF 표현식 언어는 "뷰"관련 방식으로 사용되기 때문입니다.

답변

28

원시 서블릿 API를 FacesContext으로 JSF 후드에서 가져와야하는 경우 잘못된 장소에서 작업하고있을 가능성이 있습니다. 이것이 올바른 솔루션이라고 생각한 기능 요구 사항은 무엇입니까? JSF 관리 빈 대신 실제 Servlet 클래스 또는 Filter을 사용하지 않을까요? 또는 같은 URL을 얻기 위해 더 나은 "jsfish"방법이 있기 때문에 요청 URL이 전혀 필요하지 않습니까?

기능 요구 사항에 대한 세부 정보를 포함하도록 질문을 업데이트하면 올바른 해결책을 제안 할 수 있습니다. 당신의 편집에 따라


업데이트 : 그래서, 당신은 결국 뷰 측면에서 필요? 예 : #{bean.requestURL}? 이미 EL에서 암시 적으로 사용할 수있는 HttpServletRequest 개체에서 가져올 수 있습니다.

당신이 JSP에있어 : ​​

${pageContext.request.requestURL} 

을 아니면 Facelets의에있을 때 :

#{request.requestURL} 

그리고 지금, 어떻게 당신은 자바 스크립트를 필요합니까? JavaScript 변수로 인쇄 하시겠습니까? 그렇게?

var url = '#{request.requestURL}'; 

그렇다면 window.location도 잡을 수 있습니다.

var url = window.location; 

보기 특정 세부 사항으로 JSF 빈을 복잡하게 만들 필요가 없습니다.

+0

다양한 방법으로 문제를 해결해 주셔서 감사합니다. – Adam

+0

당신을 진심으로 환영합니다. 어느 것이 마침내 도움이 되었습니까? :) – BalusC

+0

나는 결국 그 문제를 해결할 수 있었지만 나는 window.location을 사용했을 것이다. – Adam

3

당신은 이미 답변 해 주셨습니다. 모든 HTTP 요청이 faces 컨텍스트에서 검색되어야하므로이 방법을 사용해야합니다. 물론, faces 컨텍스트 검색과 같이이 메소드의 일부를 단순화 할 수 있지만, 그 세부 사항을 추상화하여 HttpRequest 객체에 직접 접근 할 수있는 일종의 프레임 워크를 사용하지 않는 한 확실한 방법입니다.

감사합니다.

관련 문제