티스토리 뷰

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

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday