Spring Web Flow. Hi John! Частина 3. Модифікація

січня
13
2012
Мітки: spring spring web flow

Зміст

Щоб продемонструвати ще один "хитрий" трюк, трохи ускладнимо завдання, додавши обмеження на імена: якщо користувач вводить ім'я, яке містить менше 3-х символів, то йому відображається сторінка з текстом "Ім'я повинно бути довше двох символів". Для цього змінимо userflow.xml, додавши в дію createUser транзакцію tooShortUsername:


    <action-state id="createUser">
        <evaluate result="user" expression=
            "hellojohnFlowActions.createUser(requestParameters.name)" />
        <transition to="tooShortUsername" on-exception=
            "com.seostella.swfhellojohn.flow.TooShortUsernameException" />
        <transition to="userReady" />
    </action-state>

і ще один стан-відображення tooShortUsername:

    <view-state id="tooShortUsername">
        <transition to="welcome" />
    </view-state>

Так як стан tooShortUsername є відображенням, то створимо файл tooShortUsername.jspx:


<html xmlns:jsp="http://java.sun.com/JSP/Page"
     xmlns:form="http://www.springframework.org/tags/form">
  <jsp:output omit-xml-declaration="yes"/>  
  <jsp:directive.page contentType="text/html;charset=UTF-8" />  
  
  <head>
      <title>Hello John - Spring Web Flow 2.x Tutorial | seostella.com</title>
  </head>

  <body>
    <h2>Error!</h2>
    
    <p>Too short username. Username should be at least 3 characters.</p>

    <form:form>
      <input type="submit" name="_eventId_welcome" 
             value="Try Again!" />  
    </form:form>
  </body>
</html>

Повний лістинг файлу user-flow.xml представлено нижче:

user-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-2.0.xsd">

    <var name="user" class="com.seostella.swfhellojohn.domain.User"/>

    <view-state id="welcome">
        <transition on="nameEntered" to="createUser"/>
    </view-state>
  
    <action-state id="createUser">
        <evaluate result="user" expression=
            "hellojohnFlowActions.createUser(requestParameters.name)" />
        <transition to="tooShortUsername" on-exception=
            "com.seostella.swfhellojohn.flow.TooShortUsernameException" />
        <transition to="userReady" />
    </action-state>  
  
    <view-state id="tooShortUsername">
        <transition to="welcome" />
    </view-state>
    
    <end-state id="userReady">
        <output name="user" />
    </end-state>
</flow>

Транзакція tooShortUsername означає наступне - якщо при виконанні операції hellojohnFlowActions.createUser(requestParameters.name) сталося виключення типу com.seostella.swfhellojohn.flow.TooShortUsernameException, то відбувається перехід на стан tooShortUsername. На даний момент в методі createUser виключення TooShortUsernameException відбуватися не може. Оголосимо клас TooShortUsernameException:


package com.seostella.swfhellojohn.flow;

@SuppressWarnings("serial")
public class TooShortUsernameException extends Exception {
  public TooShortUsernameException() {}
  
  public TooShortUsernameException(String message) {
    super(message);
  }
}

Нам також необхідно модифікувати метод createUser класу HellojohnFlowActions. Тепер він буде виглядати так:


    public User createUser(String name) throws TooShortUsernameException{
        if (name != null && name.length() > 2) {
            User user = new User(name);
            return user;
        } else {
            throw new TooShortUsernameException();
        }
    }

Все, програма написана. Зараз якщо користувач введе менше 3-х символів в текстовому полі, то він побачить сторінку tooShortUsername.jspx:

Рис 5. Сторінка tooShortUsername.jspx
Рис 5. Сторінка tooShortUsername.jspx

Код модифікованої веб-програми доступний за наступною адресою - Завантажити код Spring Web Flow HelloJohn Mod

На завершення наведемо схему переходів між станами для полегшення розуміння принципів (зображення клікабельне):

Рис 6. Схема переходів
Рис 6. Схема переходів

< Spring Web Flow. Hi John! Частина 2. Написання програми

Напишіть перше повідомлення!

Ви повинні увійти під своїм аккаунтом щоб залишати коментарі