powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в Spring web flow обработать события кроме action?
2 сообщений из 2, страница 1 из 1
Как в Spring web flow обработать события кроме action?
    #37651582
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста.
Есть на странице такой элемент например
Код: xml
1.
2.
<p:tabView id="tabView" var="category" value="#{showcaseBean.categories}">
<p:ajax event=”tabChange” listener=”#{showcaseBean.onChange}” />


При нажатии на tab надо вывести с этой категорией.
Для этого надо получить номер категории и считать из базы список связанных с ним товаров (Category 1 - * Articles).
Я это событие могу перехватить в baking bean, который связан со страницей - то есть в shop-flow.xml он объявлен в виде

Код: java
1.
<var name="showcaseBean" class="backing.ShowcaseBean"/>



и в нем есть метод

Код: java
1.
2.
3.
4.
5.
public void onChange(TabChangeEvent event)
    {
        Tab activeTab = event.getTab();
      //тут я как то наверное должен сделать запрос в базу и получить категорию и список связанных с ней товаров
    }



Если бы это был просто JSF то я вызвал бы через DAO например сессию и считал бы данные - все просто.
Но в Spring web flow сессия привязана к этому самому flow. Правильно?
То есть мне надо воспользоваться моим ShoppingService например, который является бином Spring и благодаря настройкам сессия и транзакция открывается только если я вызываю его через записи в этом shopping-flow.
То есть я не могу сделать в самом showcaseBean чтото вроде

Код: java
1.
2.
ShoppingService shoppingService = new ShoppingService();
 shoppingService.getArticlesByCategory();



А я должен сделать это так как то

Код: xml
1.
2.
3.
<transition on="tabChange">
			<evaluate expression="shoppingService.getArticlesByCategory(showcaseBean)" />
		</transition>



Однако проблема в том, что в WebFlow в файле конфигурации потока можно использовать только action?!
типа
Код: xml
1.
2.
3.
4.
5.
      <transition on="confirm" to="bookingConfirmed">
			<evaluate expression="bookingService.persistBooking(booking)" />
		</transition>
           где confirm - это из
             <р:commandButton action="confirm"/>



А что же делать с TabChangeEvent ?
В принципе можно ограничиться движением по workflow только при помощи <р:commandButton action="confirm"/>, но тогда надо иметь возможность прочитать данные из базы ВНЕ flow.xml, чтобы например заполнить те же самые страницы при переключении табов?

Как это можно решить?

P.S. существуют еще элементы интерфейса типа <h:selectOneMenu где надо подключить valueChangeListener. Как с ними в Spring webflow работать тоже?
...
Рейтинг: 0 / 0
Как в Spring web flow обработать события кроме action?
    #37669710
Фотография oson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение

делаю следующее на странице showcase.xhtml

Код: xml
1.
2.
3.
4.
5.
6.
7.
<h:form id="articlesForm">
          <p:tabView id="tabView" var="category" value="#{showcaseBean.categories}" onTabChange="tabChanged()">
           <p:ajax event="tabChange" listener="#{showcaseBean.onChange}" />
...
</p:tabView>

<p:remoteCommand name="tabChanged" action="switchTab"/>



ShowcaseBean:
Код: java
1.
2.
3.
4.
    public void onChange(TabChangeEvent event)
    {
        chosenCategory = (Category)event.getData();
    }



my-flow.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<var name="showcaseBean" class="my.backing.ShowcaseBean"/>
    <view-state id="showcase" view="showcase.xhtml" >
       
     <transition on="switchTab">
         <evaluate expression="showcaseBean.fetchArticlesForChosenCategory(showcaseService)"/>
     </transition>

   </view-state>



То есть за счет компонента <p:remoteCommand я любое событие на странице перевожу через Javascript метод в вызов action, который уже и обрабатывается в flow файле.
Это может быть например (для загрузки из базы данных на старте страницы) javascript типа

Код: javascript
1.
2.
3.
4.
5.
6.
<script type="text/javascript">
           window.onload = function ()
           {
               updateTabs();
           }
       </script>



А уже этот updateTabs() вызывает
Код: xml
1.
<p:remoteCommand name="updateTabs" action="actionForMyFlowDefinitionFile"/>
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в Spring web flow обработать события кроме action?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]