【问题标题】:How can I use Incremental Command in GWT如何在 GWT 中使用增量命令
【发布时间】:2013-07-24 14:20:26
【问题描述】:

我有以下代码,其中增量命令未按预期工作。一旦选择了下面的单选按钮,我将从产品的 txt 框中获取值并执行 RPC。根据输出,我想形成 where 子句并运行结果查询。

我有以下类变量

private static boolean isLoaded = false;

StringBuilder whereClause = new StringBuilder("select * from grocery_shop where ");

StringBuilder productCode = new StringBuilder("(");

ArrayList<String> productList = null;

下面的代码是增量命令中调用RPC的地方

    if (Dialog.getRadioproduct().getValue()) {
        DeferredCommand.addCommand(new IncrementalCommand() {

            @Override
            public boolean execute() {
                if (isLoaded) {
                    ProductServiceAsync Service =
                            ServiceFactory.getService(ProductReportService.class);
                    Service.getBasicProducts(Dialog.getTxtProduct().getValue(),
                        new AsyncCallback<ArrayList<String>>() {

                            @Override
                            public void onServiceFailure(Throwable ex) {
                                showError("Error");
                            }

                            @Override
                            public void onServiceSuccess(ArrayList<String> result) {
                                productList = result;
                                while(productList.iterator.hasnext())
                                    whereClause.append(" AND PROD = '" + productList.iterator.next() + "'");
                                isLoaded = true;
                            }
                        });
                    return false;
                }
                return true;
            }
        });
    }

我希望在上面的 RPC 成功之后执行这个执行查询,但是下面的行是在 RPC 之前执行的。

    ResultSet rs = stmt.executeQuery(whereClause);

如果我遗漏了什么,请告诉我。

【问题讨论】:

    标签: java gwt rpc gwt-rpc


    【解决方案1】:

    IncrementalCommand 已被弃用。现在你应该使用:Scheduler.RepeatingCommandScheduler.scheduleIncremental()

    除此之外,在成功答案之前执行查询是正常的,因为 RPC 是异步的(在该部分启动一个新线程),因此,您应该在 onServiceSuccessonServiceFailure 上控制您的代码(基本上根据您的要求对这些方法进行查询)。

    其他选项是使用在 GQuery 上实现的 Promises 模式。就像是 doTheRPC(...).done(...).always(...); (但如果您对 GWT 没有太多经验,则上面描述了最简单的解决方案)。

    【讨论】:

      猜你喜欢
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2022-01-08
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多