0

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

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

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. 正如我所做的单独发布一样,每次 我发布新值查询运行时,结果是我有多次查询执行。例如,如果我将发布两个值,则查询将运行两次,如果我发布三个值,则查询将执行三次。

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

4

1 回答 1

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

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

于 2011-03-24T06:35:47.123 回答