스프링 웹 플로우
MVC를 적용하게 되면 뷰에서 다른 뷰를 이동할 때 또 다시 MVC를 이용해서 뷰에 접근해야 하지만, 웹 플로우는 뷰에서 뷰로 이동할 때 MVC를 거치지 않고 바로 이동이 가능하며, 필요시에 리파지토리에서 데이터를 가져올수도 있다.
스프링 웹 플로우 환경 설정
웹 플로우를 사용하기 위해서는 servlet-context.xml에서 스키마 위치를 선언해야 한다.
xmlns:webflow="http://www.springframework.org/schema/webflow-config"
<webflow:flow-registry>
웹 페이지 흐름의 시나리오가 작성된 파일인 웹 플로우 정의 파일을 가져오는 역할을 한다.
servlet-context.xml
<webflow:flow-registry>
<webflow:flow-location path="웹 플로우 정의 파일과 경로" [id="아이디 이름"]/>
</webflow:flow-registry>
<webflow:flow-registry id="flowRegistry" base-path="경로1">
<webflow:flow-location path="경로2/웹 플로우 정의 파일" [id="아이디 이름"]/>
</webflow:flow-registry>
첫번째 방법과 두번째 방법은 결과는 동일하지만 주소를 한번에 적을지, 나눠서 적을지를 선택해서 사용하면 되고, 여러개를 만들어야 할때는 두번째 방법이 유리하다.
<webflow:flow-executor>
웹 플로우 정의 파일에 작성된 웹 페이지 흐름의 시나리오에 따라 웹 페이지 흐름을 생성하고 실행한다.
servlet-context.xml
<webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry"/>
flow-registry 속성을 설정하지 않으면 flowRegistry가 기본값으로 설정된다.
스프링 MVC 환경 설정
pom.xml에 의존 라이브러리 등록하기
<!--Web Flow-->
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.5.1.RELEASE</version>
</dependency>
FlowHandelerMapping bean 등록하기
servlet-context.xml
<beans:bean id="flowHandlerMapping" class="org.springframework.webflow.mvc.servlet.FlowHandlerMapping">
<beans:property name="flowRegistry" ref="flowRegistry"/>
</beans:bean>
FlowHandlerAdapter bean 등록하기
servlet-context.xml
<beans:bean id="flowHandlerAdapter" class="org.springframework.webflow.mvc.servlet.FlowHandlerAdapter">
<beans:property name="flowExecutor" ref="flowExecutor"/>
</beans:bean>
플로우핸들러매핑을 등록하는 이유는 MVC의 경우에는 핸들러매핑을 거쳐서 컨트롤러에 이동하게 되는데, 플로우핸들러매핑에 등록해두면 MVC를 거치지 않고 웹 플로우가 바로 이동시킬수 있게 된다.
웹 플로우 구성 요소
<flow> 요소
모든 웹 페이지 흐름은 루트 <flow> 요소로 시작하고 끝날때 까지 웹 페이지의 상태 또는 전환으로 정의된다.
<?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>
<view-state> 요소
웹 플로우에서 보여 줄 뷰를 정의하는 역할을 한다.
또한 id 속성값은 웹 브라우저에 출력할 뷰 페이지와 매핑된다.
<view-state id="뷰 이름" [view="뷰 페이지 파일 이름"] model="참조할 변수 이름">
</view-state>
<transition> 요소
현재 상태에서 발생한 이벤트를 처리하여 다른 상태로 전환하는 역할을 한다.
<view-state ...>
<transition on="이벤트 ID" to="뷰 이름/상태 ID"/>
... // 다중 <transition> 요소 설정 가능
</view-state>
<end-state> 요소
페이지 흐름의 종료를 정의 한다.
<end-state id="상태 ID / 뷰 이름" [view="뷰 페이지 파일 이름" ] />
<evaluate> 요소
웹 플로우에서 상태가 시작될 때, 화면을 보여줄 때, 전환이 일어날 때, 상태가 종료될 때, 흐름이 종료될 때처럼 시점에서 액션을 호출하는데 사용한다.
<action-state ...>
<evaluate expression="커맨드 객체의 메서드" [result="메서드의 반환 값"] result-type= "자료형"/>
<transition ... />
...
</action-state>
<action-state> 요소
웹 플로우에서 특정 시점에서 페이지 흐름을 제어하는데 사용한다.(=if)
<action-state id="상태 ID">
<evaluate ... />
<transition ... />
...
</action-state>
<decision-state> 요소
웹 플로우에서 페이지 흐름 방향을 결정하는데 사용하며, <action-state> 요소 대신 if/else 문법으로 페이지의 흐름을 쉽게 결정한다.(=삼항연산자)
<decision-state
id="상태 ID">
<if
test="커맨드 객체의 메서드" then="뷰 이름/상태 ID" else="뷰 이름/상태 ID" />
</decision-state >
'프로그래밍 공부' 카테고리의 다른 글
2025.03.25 스프링 공부 (0) | 2025.03.25 |
---|---|
2025.03.24 스프링 공부 (0) | 2025.03.24 |
2025.03.20 스프링 공부 (0) | 2025.03.20 |
2025.03.19 스프링 공부 (0) | 2025.03.19 |
2025.03.18 스프링 공부 (0) | 2025.03.18 |