我有以下代码,其中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让我知道我有什么遗漏。
答案 0 :(得分:0)
好IncrementalCommand
已被弃用。现在您应该使用:Scheduler.RepeatingCommand
或Scheduler.scheduleIncremental()
除此之外,在成功回答之前执行查询是正常的,因为RPC是异步的(一个新线程在该部分上启动),因此,您应该在onServiceSuccess
和{{onServiceFailure
上控制您的代码1}}(基本上根据您的要求对这些方法进行查询)。
其他选项是使用在GQuery上实现的Promises模式。就像是 doTheRPC(...)完成的(......)总是(...)。 (但如果你没有太多关于GWT的经验,最简单的解决方案如上所述)。