Whiteship's Note


2장 JSF 요청 처리 생명주기 - Phase 6. 응답 보여주기

JSF/JSF in Action : 2010.01.11 20:58


Render Response

- 최종적으로 사용자에게 응답을 보낸다.
- 뷰 상태를 저장하여 '뷰 복원하기' 단계에서 재사용할 수 있게 한다.
- 특정 뷰 기술에 종속적이지 않다.
- 컨트롤러의 인코딩 메서드 결과만을 뷰에서 사용할 수 있다.
- 컨트롤러의 인코딩 메서드 결과를 마크업을 만드는 애플리케이션에서 통합할 수 있다.
- 컨트롤러의 인코딩 메서드 결과를 정적인 템플릿에 통합할 수 있다.
- 컨트롤러의 디코딩 메서드 결과를 JSP 같은 동적 리소스에 통합할 수 있다.
- 각각의 컨트롤러 인코딩 과정 중에 변환기(Conveter)를 사용하여 컴포넌트의 값을 문자열로 변환한다.
- 이 단계가 JSF 요청 처리 생명주기의 마지막 단계다.
top


2장 JSF 요청 처리 생명주기 - Phase 5. 애플리케이션 호출하기

JSF/JSF in Action : 2010.01.08 21:49


Invoke Application

- 이 단계에서 등록되어 있는 리스너로 이벤트를 전파한다.
- '요청값 적용하기' 단계에서 만든 액션 이벤트를 여기서 전파한다.
- 컴포넌트에 등록된 액션 리스너 EL을 평가하여 백빈의 특정 메서드(액션 리스너 메서드)를 실행한다.
- 액션 리스너 메서드는 컴포넌트의 actionListener 속성으로 설정한다.
- 액션 리스너 메서드 실행이 끝나면 모든 컴포넌트에 자동으로 등록되는 기본 리스너를 실행한다.
- 기본 리스너는 컴포넌트에 등록되어 있는 액션 메서드를 호출한 뒤 해당 메서드의 논리적인 이름을 통해 랜더링할 뷰를 찾는다.
- 액션 메서드는 컴포넌트의 action 속성을 설정한다.
- 액션 메서드가 없는 경우 기본 액션 리스너가 현재뷰를 랜더링 한다.
- 액션 리스너 메서드나, 액션 메서드에서는 직접 응답을 랜더링 할 수도 있고, 애플리케이션 메시지를 추가할 수도 있고, 이벤트를 만들 수도 있고, 애플리케이션 로직을 실행할 수도 있고, 그냥 뷰 랜더링 단계로 건너뛸 수도 있다.
- 모든 리스너 실행이 끝나면 뷰를 랜더링 할 준비가 된 것이다.


top


2장 JSF 요청 처리 생명주기 - Phase 4. 모델 값 변경하기

JSF/JSF in Action : 2010.01.07 20:38


Update Model Values

- JSF EL 표현식을 통해서 모델 또는 백빈의 속성 값을 설정한다.

<h:inputText id="helloInput" value="#{helloBean.numControls}" 
             required="true"> 
... 
</h:inputText> 

1. helloBean이라는 키를 가지고 있는 빈을 찾아온다.
2. helloBean의 numControls 속성에 값을 해당 컴포넌트의 로컬 값으로 설정한다.

- 이 단계가 끝나면 관련 리스너에 이벤트를 보내고, 여태까지 그랬던것처럼 리스너에서는 응답을 직접 출력하거나  Render Response 단계로 건너뛸수도 있다.



top


2장 JSF 요청 처리 생명주기 - Phase 3. 검증하기

JSF/JSF in Action : 2010.01.07 20:26


Process Validation

- 이 단계에서 JSF는 컴포넌트 트리를 순회하면서 각각의 컴포넌트에게 자신의 값을 수용할 수 있는지 확인하도록 요청한다.
- '요청 값 적용하기' 단계에서 입력 컴포넌트들이 갱신되기 때문에 이 단게에서는 사용자가 입력한 최신값을 가지고 있다.
- 검증을 하기전에 변환기에 의해 값이 변환된다.
- 변환기와 검증기를 무사히 거치고 나면 해당 값을 서브밋하고 다음 단계로 넘어간다.
- 그렇치 않은 경우 '응답 보여주기' 단계로 넘어간다.

<h:inputText id="helloInput" value="#{helloBean.numControls}" 
             required="true"> 
<f:validateLongRange minimum="1" maximum="500"/> 
</h:inputText> 

1. required 속성이 true가 입력한 값이 있는지 검사한다.
2. 컨버터가 입력한 값을 int로 바꾼다.
3. validateLongRange 검증기가 값의 범위를 검증한다.

- submitted value가 변환과 검증이 끝나면 그 값을 기반으로 로컬 값을 세팅하는데 이때 value change event가 발생하고 그에 따른 적절한 리스너가 실행된다. 이 리스너들에 의해 직접 응답을 출력하거나 Render Repsponse 단계로 넘어갈 수 있다.
- 모든 submitted value가 유효하다면 다음 단계로 넘어간다.


top


2장 JSF 요청 처리 생명주기 - Phase 2. 요청 값 적용하기

JSF/JSF in Action : 2010.01.06 20:42


Apply Request Values

- 사용자 입력을 받는 컴포넌트들은 사용자가 입력한 원래 데이터를 나타내는 submitted value를 가지고 있다.
- 프레임워크가 요청의 매개변수를 기반으로 submitted value를 설정해준다.
- 이 과정을 decoding이라 부른다.
- 각 컴포넌트는 자신의 id와 자신을 감싸고 있는 컴포넌트의 id를 이용해서 client identifiter를 만든다.
- 이 단계에서 컴포넌트의 요청에 자신의 client id에 해당하는 매개변수가 있는지 확인하여 있다면 그 매개변수의 값으로 설정한다.
- 컴포넌트의 immediate 속성을 true로 설정하면 검증 단계에서 하지않고 그 즉시 검증을 실행한다.
- 이 단계에서 액션 이벤트를 만들 수도 있다. 만들어진 이벤트는 FacesContext에 추가되고 나중에 '애플리케이션 호출' 단계에서 사용된다.
- 이 단계가 끝난뒤 존재하는 이벤트를 관련 리스너로 전달한다.
- 모든 랜더러, 컴포넌트, 리스너는 생명주기를 단축시켜 이 단계를 건너뛰거나 바로 최종단계로 넘어갈 수도 있다.
- 또는 각각의 입력 컴포넌트가 적절하게 디코딩된 속성을 가지고 현재 요청에 기반한 최신 값을 가지고 있을 것이다.



top


2장 JSF 기본 - 요청 처리 생명주기

JSF/JSF in Action : 2010.01.04 18:11


뷰 복원하기(restore view) - 선택한 뷰에대한 컴포넌트 트리를 찾거나 만드는 단계.  HtmlCommandButton 같은 컴포넌트에서 액션 이벤트를 발생 시킨다.

요청 값 적용하기(Apply Request Values) - 컴포넌트의 값들을 요청에 담겨있는 값과 동일하게 맞춘다. 이 과정에서 변환기(Converter)가 사용될 수 있으며,  변환시 에러가 발생하면 변환 에러를 추가한다.

검증 수행(Process Validations) - 모든 컴포넌트가 각자 검증을 수행하도록 지시한다. 검증 에러 메시지가 보고될 수 있다.

모델 값 갱신(Update Model Values) - 컴포넌트에 연결된 백빈(backing bean) 또는 모델 객체의 값을 갱신한다.  변환 에러가 보고 될 수 있다.

애플리케이션 호출(Invoke Application) - 등록된 액션 리스너를 호출한다. 

응답 랜더링(Render Response) - 선택한 뷰를 보여준다.



top