2013-04-06 2 views
25

FacesContextExternalContext의 차이점은 무엇입니까? 하나 또는 다른 것을 언제 사용할 수 있습니까? 그 중 하나가 무엇이고 다른 하나는 무엇입니까?FacesContext와 ExternalContext의 차이점

<h:commandButton ... actionListener="#{rushmore.handleMouseClick}" /> 

백업 콩 :

다음 예제는 자바 서버가 3 판을 얼굴 책에서입니다

public void handleMouseClick(ActionEvent e) { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    String clientId = e.getComponent().getClientId(context); 
    Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap(); 
    // ... 
} 

ExternalContext의 요청 매개 변수는? clientId은 무엇입니까? 애플리케이션이 시작될 때 JSF에 의해 생성됩니까?

답변

40

javadocs에서 제공하는 메소드와 해당 메소드가 정확히 무엇인지 살펴보십시오. 당신은 자바 독에 나열된 방법에서 자세히 보면

, 당신은 FacesContext는 일반적으로 어떠한 방식으로도 더 있습니다 JSF 특정 유물에 대한 액세스를 제공하는 것을 알 수 있습니다 JSF가 위에 실행되도록 설계된 "기본"Servlet 또는 Portlet API와 관련된. 예 : 유효성 검사기, 구성 요소, EL 표현식 등을 생성하고 뷰 루트, 지원되는 로케일 등에 대한 정보를 얻고 위상 리스너, 시스템 이벤트 리스너 등을 추가합니다. JSF API에만 해당되는 모든 것.

그리고 ExternalContext은 일반적으로 JSF가 현재 "커버 아래"사용하고있는 서블릿 또는 포틀릿 관련 아티팩트에 대한 액세스를 제공합니다. 예를 들어 서블릿 컨테이너에서 실행될 때 HTTP servlet request, HTTP servlet response, HTTP sessionServlet context은 본질적으로 모든 아티팩트도 포함합니다. 해당 링크를 클릭하면 getRequestParameterMap()과 같이 ExternalContext에 의해 위임 된 메소드를 차례로 제공하는 것을 볼 수 있습니다. the javadoc도 참조하십시오. 예, 해당 링크를 클릭, 당신은 명시 적으로 서블릿 요청을 언급 것을 볼 수 있습니다 :

서블릿 :이 javax.servlet.ServletRequest 방법 getParameter()getParameterNames()를 통해 사용할 매개 변수를 설정해야합니다.

모두 컨텍스트에 의해 제공 될 수있다 아무것도 없습니다. 그러므로 어느 하나를 선호하는 이유가 절대적으로 없습니다. 수행해야 할 작업에 맞는 것을 사용하십시오.

클라이언트 ID는 실제로 JSF에 의해 생성되었지만 서버가 시작될 때는 분명히 생성되지 않았습니다. 이는 뷰 단위로 모든 단일 JSF 구성 요소에 대해 생성됩니다. <input> HTML 요소를 생성 <h:inputText> 같은 입력 요소의 경우에, 또한 정확히 formId:inputId JSF 클라이언트 ID 그래서

<input type="text" id="formId:inputId" name="formId:inputId" ... /> 

name 같은 속성이된다. 요청 매개 변수 이름이됩니다. 명령 단추의 HTML 표현도 name이며 매개 변수 값으로 단추 값을 갖는 요청 매개 변수 이름으로 끝납니다.