如何在GWT中使用增量命令

时间:2013-07-24 14:20:27

标签: java gwt rpc gwt-rpc

我有以下代码,其中incremental命令没有按预期工作。选择下面的单选按钮后,我将从产品的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;

下面的代码是在Incremental命令中调用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);

Plz让我知道我有什么遗漏。

1 个答案:

答案 0 :(得分:0)

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

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

其他选项是使用在GQuery上实现的Promises模式。就像是 doTheRPC(...)完成的(......)总是(...)。 (但如果你没有太多关于GWT的经验,最简单的解决方案如上所述)。