Spring webflow: перемещение по состояниям просмотра

В весеннем веб-потоке мне нужно реализовать панель навигации, которая позволит «отступить» или возобновить поток к одному из предыдущих представлений.

Например :

  • Просмотр 1 = вход
  • Просмотр 2 = Моя информация
  • Просмотр 3 = Мои сообщения
  • Вид 4 = закрыть сеанс

В этом примере я хотел бы вернуться к представлению 2 со страницы представления 4.

Итак ... в чем вопрос? Есть ли у вас конкретная проблема?

Alex Miller 06.10.2008 19:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
7 539
2

Ответы 2

Это зависит от того, как вы собираетесь это делать. Если вы делаете это в одном потоке, у вас будет что-то вроде этого:

<view-state id = "loginView" view = "login.jsp">
    <action-state bean = "someBean" method = "login" />
    <transition on = "success" to = "informationView" />
</view-state> 

<view-state id = "informationView" view = "information.jsp">
    <render-actions>
        <action-state bean = "someBean" method = "retrieveInformation" />
    </render-actions>
    <transition on = "forward" to = "messageView" />
    <transition on = "back" to = "loginView" />
</view-state>

<view-state id = "messageView" view = "message.jsp">
    <render-actions>
        <action-state bean = "someBean" method = "retrieveMessage" />
    </render-actions>
    <transition on = "forward" to = "closeView" />
    <transition on = "back" to = "informationView" />
</view-state>

<view-state id = "closeView" view = "logout.jsp">
    <transition on = "jumpBack" to = "informationView" />
</view-state>

Переход "jumpBack" на "closeView" вернет вас в состояние просмотра № 2, которое является вашим информационным представлением.

С подпотоками это сложно. Вам нужно будет связать его в цепочку: вызвать подпоток, и если поступит сигнал о событии, в котором говорится, что вам нужно завершить поток с определенным состоянием, немедленно сделайте это.

Например, предположим, что ваша потоковая цепочка - это логин-> информация-> сообщение-> закрыть.

В закрытом потоке конечным состоянием будет "returnToInformation".

В потоке сообщений есть переход от = "returnToInformation" к = "returnToInformation".

returnToInformation также является конечным состоянием в потоке сообщений.

Затем информационный поток имеет переход от = "returnToInformation" к = "displayInformationPage", который затем повторно отображает информационную страницу.

Я сделал это, определив некоторый глобальный поток, представляющий вкладки. Затем я определил объект, представляющий вкладки в потоках, и указал, активна ли текущая вкладка. Когда пользователь перемещался по вкладкам, я соответствующим образом обновлял объект вкладки.

Когда пользователь нажимал на одну из вкладок, он использовал глобальные потоки, чтобы позволить им перемещаться между вкладками (для моей реализации мне было проще вызывать действия, а не состояния просмотра, потому что вы можете обнаружить, что представления могут меняться в зависимости от взаимодействие с пользователем, поэтому вам может потребоваться их пересчитать).

Что касается самой панели вкладок, я поместил ее в один JSP, который затем поместил вверху каждой формы, чтобы упростить обновление.

Это не самое лучшее решение, но оно работает.

Удачи.

Другие вопросы по теме