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. Создание приложения

Напишите первое сообщение!

Вы должны войти под своим аккаунтом чтобы оставлять комментарии