티스토리 뷰
Chapter15. 스프링 웹 플로우 : 주문 처리 페이지 만들기
15.2 웹 플로우와 웹 플로우 환경 설정
15.2.1 스프링 웹 플로우 환경
웹 플로우는 자바 및 xml 기반 구성에서 모두 사용할 수 있는 구성을 지원한다.
xml 기반 구성을 시작하려면 스프링 mvc 설정 파일인 servlet-context.xml에 스프링 웹 플로우 관련 네임 스페이스와 스키마 위치를 선언해야 한다.
<beans:beans
...
xmlns:webflow="http://www.springframework.org/schema/webflow-config"
xsi:schemaLocation="http://www.springframework.org/schema/webflow-config
http://www.springframework.org/schema/webflow-config/spring-webflow-config.xsd">
웹 애플리케이션에서 스프링 웹 플로우를 사용하려면 <webflow:flow-registry> 와 <webflow:flow-executor> 옵션을 설정해야 한다.
<webflow:flow-registry> 옵션
<webflow:flow-registry> 옵션은 웹 페이지 흐름의 시나리오가 작성된 파일인 웹 플로우 정의 파일을 가져오는 역할을 한다.
* id 나 name을 주는 이유는 호출해서 사용하기 위함이다.
<webflow:flow-registry id="flowRegistry">
<webflow:flow-location path="웹 플로우 정의 파일과 경로" [id="아이디 이름"]/>
</webflow:flow-registry>
<webflow:flow-registry id="flowRegistry" base-path="경로1">
<webflow:flow-location path="웹 플로우 정의 파일과 경로" [id="아이디 이름"]/>
</webflow:flow-registry>
<webflow:flow-registry> 의 속성
속성 | 설명 |
id | <webflow:flow-registry> 옵션 ID이다. |
base-path | 웹 플로우 정의 파일이 위치한 상대 경로이다. |
flow-builder-services | 흐름을 빌드하는데 사용되는 서비스 및 설정을 사용자 지정할 수 있다. |
<webflow:flow-registry> 옵션은 <webflow:flow-location> 옵션을 이용하여 웹 플로우 정의 파일을 설정한다.
<webflow:flow-location> 의 속성
속성 | 설명 |
id | 웹 플로우 정의 파일의 흐름 ID이다. |
path | 웹 플로우 정의 파일과 경로이다. |
<webflow:flow-executor> 옵션
<webflow_flow-executor> 옵션은 웹 플로우 정의 파일에 작성된 웹 페이지 흐름의 시나이로에 따라 웹 페이지 흐름을 생성하고 실행한다.
<webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry" />
flowRegistry를 불러와서 id를 실행한다는 뜻과 같다.
<webflow:flow-executor> 의 속성
속성 | 설명 |
id | <webflow:flow-executor> 옵션 ID이다. |
flow-registry | <webflow:flow-registry> 옵션 ID이다. |
15.2.2 스프링 MVC 환경 설정
웹 플로우를 적용하기 위해서는 의존 라이브러리 등록과 빈 등록을 해야한다.
pom.xml 파일에 의존 라이브러리 등록하기
스프링 웹 플로우를 사용하려면 pom.xml 파일에 spring-webflow.jar 의존 라이브러리를 등록해야한다.
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.5.1.RELEASE</version>
</dependency>
FlowHandlerMapping 빈 등록하기
FlowHandlerMapping은 디스패처 서블릿이 내부적으로 웹 플로우 정의 파일을 참조하여 웹 요청에 대한 요청 처리를 매핑시킨다.
<webflow:flow-registry> 옵션 ID를 참조하여 디스패처 서블릿이 애플리케이션의 리소스 경로를 웹 플로우 정의 파일에 등록된 웹 흐름에 매핑 시킨다.
<beans:bean id="flowHandlerMapping" class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<beans:property name="flowRegistry" ref="flowRegistry" />
</beans:bean>
FlowHandlerAdapter 빈 등록하기
FlowHandlerAdapter는 웹 흐름의 요청을 처리하고 이런 요청을 기반으로 웹 흐름을 제어할 수 있도록 한다.
요청을 처리하는 웹 흐름을 실행하고자 <webflow:flow-executor> 옵션 ID를 참조한다.
<beans:bean id="flowHandlerAdapter" class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<beans:property name="flowExecutor" ref="flowExecutor" />
</beans:bean>
15.3 웹 플로우 구성 요소
웹 애플리케이션에 스플이 웹 플로우를 적용하려면 xml 기반 웹 플로우 정의 문서가 필요하다.
그러한 문서는 <flow>로 시작해 </ flow>로 끝난다.
15.3.1 <flow> 요소
모든 웹 페이지 흐름은 루트 <flow>요소로 시작해 </flow>로 종료할 때 까지 <flow>/..</flow> 요소 단위 내에서 웹 페이지의 상태 또는 전환으로 정의된다.
XML 네임스페이스와 스키마 위치 등을 전달한다.
<?xml version="1.0" encoding="UTF-8"?>
<flow xmlns="http://www.springframework.org/schema/webflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/webflow
http://www.springframework.org/schema/webflow/spring-webflow.xsd">
...
</flow>
15.3.2 <view-state> 요소
웹 플로우에서 보여 줄 뷰를 정의하는 역할을 한다.(=뷰 리졸브)
<view-state> 요소에서 id 속성 값은 웹 브라우저에 출력할 뷰 페이지와 매핑된다.
<view-state id="뷰 이름" [view="뷰 페이지 파일 이름" model="참조할 변수 이름"]>
</view-state>
* model은 참조할 모델을 말한다.
* <view-state> 요소의 id 속성 값과 일치하는 뷰 이름을 찾을 수 없으면 HTTP Stauts 404 오류가 발생한다.
<view-state> 요소의 속성
속성 | 설명 |
id | 뷰 이름 |
view | 뷰 페이지 파일 이름 |
model | 참조할 변수 이름 |
15.3.3 <transition> 요소
<transition> 요소는 현재 상태에서 발생한 이벤트를 처리해 다른 상태로 전환하는 역할을 한다.
<view-state id="뷰 이름" [view="뷰 페이지 파일 이름" model="참조할 변수 이름"]>
<transition on="이벤트 ID" to="뷰 이름/상태 ID" />
...(다중 <transition> 가능)
</view-state>
<transition> 요소의 속성
속성 | 설명 |
on | 현재 상태에서 발행하는 이벤트 ID |
to | 이동하는 뷰 템플릿 ID |
on-exception | 참조하려는 예외 처리 객체 |
발생한 이벤트 ID에 따라 사용자에게 보여줄 뷰 페이지로 이동한다.
예를 들어 현재 뷰 페이지 orderCustomerInfo에서 이벤트 ID customerInfo가 발생하면 뷰 페이지 orderShippingInfo.jsp로 이동한다.
웹 페이지에서 이벤트 id를 얻으려면 _eventId_이벤트ID'로 이벤트 ID customerInfo를 설정해야 한다.
15.3.4 <end-state> 요소
페이지 흐름의 종료를 정의한다.
<end-state id="상태 ID/뷰 이름" [view="뷰 페이지 파일 이름"] />
현재 뷰 페이지가 id의 뷰 이름과 같을 경우 페이지 흐름을 종료하고 결과를 반환한다.
<end-state> 요소의 속성
속성 | 설명 |
id | 현재 상태의 ID |
view | 현재 상태의 뷰 페이지 파일 이름 |
15.3.5 <evaluate> 요소
웹 플로우에서 상태가 시작될 떄 화면을 보여줄 때, 전환이 일어날 때, 상태가 종료될 때, 흐름이 종료될 때처럼 시점에서 액션을 호출하는데 사용한다.
<action-state id="confirmOrder">
<evaluate expression="커맨드 객체의 메서드" [result="메서드의 반환 값" result-type="자료형"] />
<transition to="뷰 이름/상태 ID" />
</action-state>
<evaluate> 요소의 속성
속성 | 설명 |
expression | 참조하려는 객체의 메서드 |
result | 메서드의 반환 결과 값을 저장하는 커맨드 객체 이름 |
result-type | 메서드의 반환 결과 값에 대한 자료형 |
15.3.6 <action-state> 요소
웹 플로우에서 특정 시점에 페이지 흐름을 제어하는데 사용한다.
웹 플로우에서 <action-state> 요소를 사용하면 액션 결과를 기반으로 다른 상태로 저노한한다.
<action-state id="상태 ID">
<evaluate ... />
<transition ... />
</action-state>
<action-state> 요소의 속성
속성 | 설명 |
id | 현재 상태의 ID |
15.3.7 <decision-state> 요소
웹 플로우에서 페이지의 흐름 방향을 결정하는데 사용한다.
<action-state> 요소를 대신해 if/else 문법으로 페이지의 흐름 방향을 쉽게 결정할 수 있다.
<decision-state id="상태 ID">
<if test="커맨드 객체의 메서드" then="뷰 이름/상태 ID" else="뷰 이름/상태 ID" />
</decision-state>
<descision-state>
속성 | 설명 |
id | 현재 상태의 ID |
'코딩 > spring' 카테고리의 다른 글
[19주 3일차] 메서드의 파라미터를 바인딩하기 위한 주요 애노테이션 (0) | 2024.02.14 |
---|---|
[18주 1일차] 데이터베이스 연동 : 도서 목록 CRUD 처리하기 (1) | 2024.02.05 |
[17주 4일차] 스프링 웹 플로우 : 주문 처리 페이지 만들기 (2) (0) | 2024.02.01 |
[17주 3일차] 스프링 웹 플로우 (1) (0) | 2024.01.31 |
[17주 3일차] 스프링 웹 플로우 : 주문 처리 페이지 만들기 (0) | 2024.01.31 |
- Total
- Today
- Yesterday