Как реализовать условные переходы в Spring Webflow

Просто осваиваю Spring Webflow. У меня какие-то простые формы работают и переплетаются туда-сюда - очень круто. На данный момент для меня не очевидна одна вещь: как динамически запускать поток на основе пользовательского ввода.

то есть представьте себе поток, в котором пользователь выбирает вариант на первом экране, и на основе сделанного выбора могут быть инициированы различные подпотоки. В псевдотерминах что-то вроде следующего псевдопотока:

    <view-state id="selectService" model="serviceType">
            <transition on="proceed">
               <if "serviceType.selectedValue==1" to="subFlow1" />
               <if "serviceType.selectedValue==2" to="subFlow2" />
               <if "serviceType.selectedValue==3">
                      <if "serviceType.isValid==3" to="subFlow3" />
               </if>
               <default to="cancel" />
             </transition>
            <transition on="cancel" to="cancel" />
    </view-state>

Я просмотрел примеры, документы, stackoverflow и весенние форумы, но нигде этого не видел.


person Mark D    schedule 20.01.2012    source источник


Ответы (2)


Это описано в Spring in Action 3, которая, на мой взгляд, является отличной книгой по разработке Spring.

Однако, чтобы ответить на ваш вопрос здесь, я думаю, вы ищете decision-state элемент перехода. Чтобы получить пользовательский ввод, вы должны иметь возможность использовать Spring Expression Language (SpEL) в атрибуте test.

person nicholas.hauschild    schedule 20.01.2012
comment
Вау, как я пропустил это, большое спасибо, Николас, у меня есть версия Spring 2.0 Spring в действии, но с тех пор многое изменилось. - person Mark D; 21.01.2012

Недавно я пытался использовать решающий модуль, но, честно говоря, для любой нетривиальной логики лучше всего перенести ее в метод Java, где вы можете легко выполнить модульное тестирование. Затем вызовите указанный метод и используйте вывод оттуда. XML-файлы потока лучше сделать как можно более простыми.

person Joseph Lust    schedule 09.04.2014