Spring WebFlow

Po pewnej przerwie spowodowanej chorobą i sesją powracam :D
Jako, że ostatnimi czasy miałem okazję zajmować się Spring WebFlow, dlatego też dziś będziecie mieli “przyjemność” poczytać coś na ten temat :D

A więc zaczynamy !!!

Na początek pytanie : Czy wiesz co to jest Spring WebFlow ?
Bardzo krótka odpowiedź : Framework który pozwala definiować flow (czyli przepływ) przez Waszą aplikację i w łatwy sposób nim zarządzać :D

Pewnie niejednokrotnie mieliście problemy z zarządzaniem zdefiniowanym przez Was przepływem, w szczególności toczyliście boje z obsługą różnych przejść, powrotów, wszelkiego rodzaju powiązań i przekazywania danych między akcjami itd. itp. :D
A więc Spring WebFlow ma za zadanie Wam to ułatwić, czy tak naprawdę ułatwia ? No cóż - ja mam mieszane uczucia :(
W dzisiejszej części przedstawię prostą konfigurację Spring WebFlow z użyciem Spring MVC.

W pierwszym kroku musimy stworzyć projekt webowy którego deployment descriptor (web.xml) powinien wyglądać następująco :




org.springframework.web.context.ContextLoaderListener
  

  
    sampleservlet
    org.springframework.web.servlet.DispatcherServlet
    1
    
contextConfigLocation

        /WEB-INF/sample-servlet.xml
        /WEB-INF/sample-flow.xml
      
    
  

  
    sampleservlet
    *.htm
  

  
    index.jsp
  

W powyższym pliku podaliśmy ścieżki do dwóch plików (/WEB-INF/sample-servlet.xml oraz /WEB-INF/sample-flow.xml), które to przechowują ogólną konfigurację naszej aplikacji, taką jak viewResolver służący do tworzenia widoku (w naszym przypadku będzie odpowiednio mapował widok zdefiniowany w konfiguracji flow na odpowiednią stronę JSP) czy też flowController dzięki któremu będziemy mieli możliwość wywoływania zdefiniowanego przez nas flow o podanym identyfikatorze (przykładowy sposób wywołania flow w dalszej części tego wpisu).

Kolejny krok to stworzenie plików sample-servlet.xml i sample-flow.xml.
Na pierwszy rzut pójdzie sample-servlet.xml :




  

  

  


  

  

Powyżej były widoczne wspomniane wcześniej viewResolver i flowController.

Oczywiście teraz zdefiniujemy główny plik konfiguracyjny flow (sample-flow.xml) :




  

  
    
  


FlowExecutor to główny element obsługi flow w Spring WebFlow, to on jest wykorzystywany przez flowController do obsługi przepływu naszej aplikacji.

Nasz kontroler zdefiniowaliśmy jako springowy bean w pliku applicationContext.xml :




  


Zwróci nam on listę obiektów, które będą zawierały namiary na blogi :)

Oto definicja naszego pierwszego (i w tym wpisie jedynego) flow - plik first-flow.xml




  

  
    
      
        
      
    
  


Jak łatwo zauważyć w powyższym kodzie, nasz flow przekieruje nas do widoku listForm co dzięki konfiguracji viewResolver`a w pliku sample-flow.xml sprawi, iż zostaniemy przekierowani do strony listForm.jsp znajdującej się w katalogu /WEB-INF/jsp/.
Zwróćmy też uwagę na tag gdyż definiuje on “punkt wejściowy” naszego przepływu, to właśnie od stanu zdefiniowanego za pomocą tego znacznika zacznie się nasz przepływ.
W chwili obecnej mamy w naszym przepływie tylko jeden stan o nazwie list, gdy osiągniemy ten stan zostanie wygenerowany widok, jego do jego stworzenia zostanie użyty nasz kontroler na którym zostanie wywołana metoda loadData (zwracająca kolekcję obiektów), kolekcja którą otrzymamy w wyniku jej wykonania będzie widoczna dla nas pod nazwą result (zgodnie z tym co zostało podane w znaczniku ).

Oto strona (listForm.jsp) na której zostanie pokazana zawartość kolekcji zwróconej przez wywołanie metody na kontrolerze :

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>







Tak jak już wspomniałem, nasz kontroler (SampleController) będzie w tym przypadku zwracał jedynie przykładową listę zawierającą informacje o trzech blogach :

package org.holewa.webflow.controller;

import org.holewa.webflow.vo.SampleVO;

import java.util.List;
import java.util.ArrayList;

public class SampleController {

  public List loadData() {
    List list =  new ArrayList();
    list.add(new SampleVO("http://jaceklaskowski.pl/", "Blog Jacka Laskowskiego"));
    list.add(new SampleVO("http://blog.mocna-kawa.com/", "Blog Wiktora"));
    list.add(new SampleVO("http://holewa.org/", "Mój blog"));
    return list;
  }

}

Value object (SampleVO) który użyliśmy w tym przykładzie ma następującą implementację :

package org.holewa.webflow.vo;

public class SampleVO {

  private String link;
  private String name;

  public SampleVO(String link, String name) {
    this.link = link;
    this.name = name;
  }

  public String getLink() {
    return link;
  }

  public String getName() {
    return name;
  }

  public void setLink(String link) {
    this.link = link;
  }

  public void setName(String name) {
    this.name = name;
  }
}

Teraz pasuje przygotować stronę powitalną, po kliknięciu na link przekieruje ona użytkownika do naszego flow.
Strona index.jsp jest następującej postaci :

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



 Uruchom flow


Wywołanie /flowController.htm?_flowId=first-flow sprawi, że zostaniemy przekierowani do przepływu o identyfikatorze first-flow.
To w zasadzie tyle na początek przygody z Spring WebFlow, kod aplikacji (bez bibliotek) możecie pobrać tutaj. Kolejna część wkrótce (wytłumaczę w niej dlaczego mam mieszane uczucia w stosunku do tego frameworku) :D

  • Digg
  • del.icio.us
  • Google
  • description
  • Technorati
  • Wykop
February 16, 2008 | |

COMMENTS

 

Trackback URI | Comments RSS

Leave a Reply