Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в Spring web flow обработать событие onChange 
:(
    Опции темы
oson
Дата 8.2.2012, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 289
Регистрация: 3.3.2004
Где: Севастополь

Репутация: нет
Всего: 1



Подскажите пожалуйста как решается обработка событий в Spring web flow
Есть на странице такой элемент например
<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 он объявлен в виде

Код

<var name="showcaseBean" class="backing.ShowcaseBean"/>


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

 
Код

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


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

 ShoppingService shoppingService = new ShoppingService();
 shoppingService.getArticlesByCategory();


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

              
Код

                <transition on="tabChange">
            <evaluate expression="shoppingService.getArticlesByCategory(showcaseBean)" />
        </transition>


Однако проблема в том, что в WebFlow в файле конфигурации потока можно использовать только action?!
типа 
          
Код

            <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 работать тоже?
PM MAIL   Вверх
oson
Дата 19.2.2012, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 289
Регистрация: 3.3.2004
Где: Севастополь

Репутация: нет
Всего: 1



Решение

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

Код

<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:
    
Код

public void onChange(TabChangeEvent event)
    {
        chosenCategory = (Category)event.getData();
    }



my-flow.xml
Код

<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 типа

Код

<script type="text/javascript">
           window.onload = function ()
           {
               updateTabs();
           }
       </script>



А уже этот updateTabs() вызывает 
Код

<p:remoteCommand name="updateTabs" action="actionForMyFlowDefinitionFile"/>

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1054 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.