如何使用zk中的EventQueues.publish发布多个事件

时间:2011-02-21 08:21:35

标签: java java-ee zk

希望你的问题得到解决,但我的问题仍然存在 而且我认为你可以帮助我摆脱这个问题。 实际上,根据用户,我有多个事件要逐个发布 选择例如:用户选择SeasonServiceDateFromDateTo然后点击刷新按钮。

单击刷新按钮时,我使用了上述逻辑 使用下面提到的代码获取所有数据

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. 因为我每次都单独发布 我发布新值查询运行,结果是我有 多次查询执行。例如,如果我将发布两个 将查询的值运行两次,如果我发布的话 查询执行三次的三个值。

  3. 我不知道他们的问题是什么。帮我解决我的错误。

1 个答案:

答案 0 :(得分:0)

  1. 通过EventQueue传递的事件对象是您将有效负载放在那里的地方。您只需定义聚合事件类并收集信息并将其发布为整体。

  2. 如果您可以整体发布所有信息(使用聚合事件),则会自动解决。