프로그래밍 공부

2025.03.21 스프링 공부

3452 2025. 3. 24. 12:21

스프링 웹 플로우

 

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> 요소로 시작하고 끝날때 까지 웹 페이지의 상태 또는 전환으로 정의된다.

 

 

 

 

 

<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