Как опубликовать несколько событий с помощью EventQueues.publish в ZK - PullRequest
0 голосов
/ 21 февраля 2011

Надеюсь, ваша проблема решена, но моя проблема все еще существует и я подумал, что вы можете помочь мне выбраться из этой проблемы. на самом деле у меня было несколько событий, чтобы опубликовать одно за другим в соответствии с пользователем например, для выбора пользователя: Season, Service, DateFrom и DateTo и затем нажимает кнопку обновления.

Когда нажата кнопка обновления, я использовал вышеуказанную логику для получить все данные, используя указанный ниже код

public void onClick$ref(Event event){

    if(lbox_service.getSelectedIndex() != 0 || lbox_season.getSelectedIndex() != 0)
    {
        if(lbox_service.getSelectedIndex() == 0)
        {
            setService_id("0");
        }
        else
        {
            setService_id(lbox_service.getSelectedItem().getValue().toString());
        }
        if(lbox_season.getSelectedIndex() == 0)
        {
            setSeason_id("0");
        }
        else
        {
            setSeason_id(lbox_season.getSelectedItem().getValue().toString());
        }

        System.out.println("Service Index 11 : "+ lbox_service.getSelectedIndex());
        System.out.println("Season Index 11 : "+ lbox_season.getSelectedIndex());

        EventQueue evtQ = EventQueues.lookup("myEventQueue", EventQueues.APPLICATION, true);
        //evtQ.publish(new Event("service_id", self, lbox_service.getSelectedItem().getValue().toString()));
        //evtQ.publish(new Event("season_id", self, lbox_season.getSelectedItem().getValue().toString()));

        evtQ.publish(new Event("service_id", self, getService_id()));
        evtQ.publish(new Event("season_id", self, getSeason_id()));

        //evtQ.publish(new Event("onClickRef", null, lbox_service.getSelectedItem().getValue().toString()));
        //evtQ.publish(new Event("onClickRef", null, lbox_season.getSelectedItem().getValue().toString()));

        /*.publish(new Event("onClickRef", null, lbox_service.getSelectedItem().getValue().toString()));
         EventQueues.lookup("myEventQu", EventQueues.DESKTOP, true).publish(new Event(
             "onClickRef", null, lbox_season.getSelectedItem().getValue().toString()));*/
    }
    else
    {
        setService_id("0");
        setSeason_id("0");

        EventQueue evtQ = EventQueues.lookup("myEventQueue", EventQueues.APPLICATION, true);
        evtQ.publish(new Event("service_id", self, getService_id()));
        evtQ.publish(new Event("season_id", self, getSeason_id()));

        System.out.println("Service Index : "+ lbox_service.getSelectedIndex());
        System.out.println("Season Index : "+ lbox_season.getSelectedIndex());
    }
}

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

public void doAfterCompose(Component comp) throws Exception {

    super.doAfterCompose(comp);
    EventQueues.lookup("myEventQueue", EventQueues.APPLICATION, true).subscribe(new EventListener() {

        public void onEvent(Event event) throws Exception {

            /*String service = (String) event.getData();

            logger.info("Servive $$$$$$$$$ " + service);
            //String season = (String) event.getData();
            //logger.info("Season $$$$$$$$$ " + season); */     
            if("service_id".equals(event.getName())) {
                setService_id((String) event.getData());
                baseController.setFilter_bar(true);
                System.out.println("Service Id :" +event.getData());
            }
            else if("season_id".equals(event.getName())) {
                setSeason_id((String) event.getData());
                baseController.setFilter_bar(true);
                System.out.println("Season Id :" +event.getData());
            }

            /*setService_id((String) event.getData());
            setSeason_id((String) event.getData());*/

            /*if("season_id".equals(event.getName())){
                setSeason_id((String) event.getData());
            }else
            {
                setSeason_id("0");
            }*/
            System.out.println("Filter bar :" +baseController.isFilter_bar());
            if(baseController.isFilter_bar() == true)
            {
                String dateFrom = "";
                String dateTo = "";
                String order = "2";
                List TDRetailers = verificationStoreHibernateDao.getTraditionalRetailers(
                    getService_id(), getSeason_id(), dateFrom, dateTo, order);

                //VerificationStoreHibernateDao storeHibernateDao = new VerificationStoreHibernateDao();
                //List TDRetailers = this.verificationStoreHibernateDao.getTraditionalRetailers(service_id);
                //ListModel listModel = this.retailers.getModel();
                ListModelList listModelList = (ListModelList) retailer.getModel();
                listModelList.clear();
                listModelList.addAll(TDRetailers);
                baseController.setFilter_bar(true);
            }
        }
    });
}

но на самом деле моя проблема с запуском запроса и с получать эти опубликованные значения. На их основе я смогу выполнить мои традиционные getTraditionalRetailers запросы.

Моя проблема

  1. как опубликовать несколько значений событий. Это правильный путь что я сделал.

  2. как я делал отдельную публикацию, каждый раз Я публикую новое значение. Запрос выполняется , в результате я получил многократное выполнение запроса времени. например, если я опубликую два значения запросов выполняются для двух раз, и если я опубликую три значения, которые запрос выполняет три раза.

Я не знаю, в чем их проблема. Помогите мне решить мою ошибку.

1 Ответ

0 голосов
/ 24 марта 2011
  1. Объект события, передаваемый через EventQueue, - это место, куда вы помещаете свою полезную нагрузку.Вы можете просто определить совокупный класс событий, собрать информацию и опубликовать их в целом.

  2. Если вы можете опубликовать всю информацию в целом (с использованием совокупного события), это решается автоматически.

...