contextConfigLocation
/WEB-INF/config/web-application-config.xml
org.springframework.web.context.ContextLoaderListener
Spring MVC Dispatcher Servlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
0
Spring MVC Dispatcher Servlet
/spring/*
index.html
==== web-application-config.xml ====
Spring MVC 와 Spring Web Flow 를 위한 설정파일은 아래와 같다.\\
{{:egovframework:rte:bsl:hellowebconfig.jpg|}}
먼저 web-application-config.xml 를 살펴보겠다.
===webmvc-config.xml ===
Spring MVC 를 위한 설정파일.
/WEB-INF/layouts/layouts.xml
/WEB-INF/views.xml
/WEB-INF/sample/views.xml
/WEB-INF/sample/hello/views.xml
===webflow-config.xml ===
Web Flow 관련된 설정 파일.
상세 : [[egovframework:rte:bsl:setting_system#커스텀_flowbuilder_서비스_설정| Web Flow views 에 커스터마이징 할 수 있도록 확장하여 사용한다.]]
=== tiles ===
URL : http://localhost:8080/swfHelloWorld으로 처음 접근할 때 index.html 파일이 열리게 된다. \\
**index.html**
위에서 보는 것처럼 "spring/start" URL 을 호출한다.\\
**spring/start** 에 해당하는 화면은 먼저 설정된 tiles 설정정보에서 찾게 된다. \\
tiles 관련된 것은 [[http://tiles.apache.org/]] 를 참조하시길 바랍니다.\\
등록된 tiles 설정파일은 앞 설정에서 나왔다. 다시 보면 ..\\
...
/WEB-INF/layouts/layouts.xml
/WEB-INF/views.xml
/WEB-INF/sample/views.xml
/WEB-INF/sample/hello/views.xml
...
==== Hello, Web Flow ====
다시 돌아와서 Hello , Web Flow 를 화면에 찍어 보도록 하겠다.\\
Web Flow 로 해당 화면의 흐름을 작성한 예를 보자.\\
hello-flow.xml
자세한 설명은 [[egovframework:rte:bsl:flow_definition|flow 정의]] 에서 다루고 있다. \\
간단하게 보면 .\\
view-state , end-state 로 나눠져 있는 것을 볼 수 있다. 처음으로 존재하는 view-state 는 시작점이라고 생각해도 무방하다. 또한 문자 그대로 end-state 는 마지막점이다.
hello 라는 화면이 맨처음 나오고 거기서 helloworld 화면이 보이고 다음은 return 이라는 마지막실행을 하는 것이다.\\
view-state 안쪽의 transition 는 화면에서 클릭하여 이동하게 하는 버튼의 실행이라고 할 수 있다. 여기선 say 를 눌러서 실행하면 helloworld 라는 view-state 로 이동하는 것이다.
마찬가지로. return 을 누르면 externalRedirect:servletRelative:/start 으로 이동하는 것이다.\\
*참조 : [[egovframework:rte:bsl:with_spring_mvc|externalRedirect , servletRelative ]]
view-state 에서 별도의 view 를 정의하지 않은 경우 id 를 가지고 view 를 가져오게 된다. 여기서는 hello 라는 id 가 곧 view 명이 되게 된다.\\
default는 flow.xml 과 같은 디렉토리에 있는 화면소스(JSP, xhtml, 등)을 찾게 된다. 여기선 tiles 로 정의된 부분을 참조한다.\\
.../hello/views.xml 파일 내용을 살펴보면,\\
...
...
로 화면에 해당되는 hello.jsp 를 가져오는 것을 확인 할 수 있다.\\
그렇다면 transition 은 화면에서 발생한 이벤트와 매핑을 할까? hello.jsp 소스를 잠시 보겠다.\\
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
Welcome to Spring Web Flow
Welcome to Spring Web Flow
{{:egovframework:rte:bsl:hello1-1page.jpg|}}\\
보는 봐와 같이 form으로 둘러싸인 곳에 해답은 있다. 에서 name 을 보면 **_eventId_say** 로 답을 찾을 수 있다.\\
_eventId 가 답이다. say는 transition 의 on 과 같음을 확인 할 수 있다. eventId 에 정의된 특정위치의 문자열을 가지고 transition 를 분석하다. \\
transition 에 대한 내용은 [[egovframework:rte:bsl:flow_definition |flow 정의]]에서 자세히 살펴보길 바란다.
eventId 가 "say"를 가지고 form 이 전달되면 flow 정의에 따라 transition 을 찾고 그에 맞는 state 로 넘어가게 된다.\\
결과는 별로의 값을 가지고 보여주는 화면은 아니고 단지 아래와 같은 화면을 보여주도록 되어 있다. \\
{{:egovframework:rte:bsl:hello1-2page.jpg|}}
다음은 입력값이 있는 예를 살펴 보도록 하겠다.
==== Hello, Web Flow with input value ====
먼저 flow 정의 파일인 hello2-flow.xml 을 보도록 하자.\\
실행 시나리오는 on-start => view-state => action-state => decision-stat => end-state 이다.
**hello2-flow.xml **
보여주고자하는 것은 hello2 화면(view-state) 에서 입력데이타를 객체에 바인딩하고,\\
helloService 서비스 객체를 통해 addHello 메소드 실행, 그후 결과에 따라 분기문(decision-state) 를 통과하여 helloworld2 화면으로 가는 것이다.\\
간략하게 설명드리면,\\
on-start 는 flow 를 처음 실행할 때 선행하여 실행된다. 여기서는 helloService의 sayMessage 를 실행하여 flowScope 내의 message 객체로 저장한다.\\
**HelloService .java**
...
@Service("helloService")
public class HelloService implements Iservice {
public Message sayMessage() {
return new Message();
}
...
}
flow가 시작할 때 첫번째로 만나는 view-state 는 시작점으로 인식한다. 따라서 view-state "hello2" 는 시작점에 해당한다.\\
hello2.jsp 를 화면에 보여주는데 앞단의 예제와 같다. Spring MVC 의 tiles 를 이용하여 보여주게 된다. \\
**views.xml**
...
...
**hello.jsp **
...
to Who :
...
상단의 화면은 아래 hello2-flow.xml 내의 view-state 와 매핑된다.\\
여기서 봐야 할 부분은 화면내의 str 이름의 input 데이터를 message 라는 객체로 바인딩하는 부분인다. \\
...
...
이벤트에 해당하는 proceed 버튼을 클리하면 다음 state 로 이동하게된다.
...
...
actionHello 은 아래와 같다. 하는 기능은 helloService 객체의 addHello 메소드 호출이다.\\
...
...
addHello 메소드는 아래와 같다. 반환되는 값이 boolean 인 것을 주목할 필요가 있다. 리턴되는 boolean 값은 transition 의 yes, no 와 매핑된다.\\
...
public boolean addHello(Message msg){
try{
msg.setStr("Hello,"+msg.getStr());
}catch (Exception e) {
return false;
}
return true;
}
...
다음 나오는 decision-state는 아래와 같이 분기문의 기능을 수행한다.\\
...
...
helloworld2 화면으로 이동하게 되면 아래와 같은 jsp 소스를 확인할 수 있다. message 객체의 str 값을 EL 을 이용하요 ${message.str} 으로 보여주고 있다.\\
<%@ taglib prefix="form"
uri="http://www.springframework.org/tags/form" %>
Hello Message?
Step two :
화면을 다시 보면 \\
{{:egovframework:rte:bsl:hello2-1page.jpg|}}\\
say 버튼을 누르면,\\
{{:egovframework:rte:bsl:hello2-2page.jpg|}}\\
Hello , 뒷에 넣었던 문장이 붙어서 나오게 된다. \\