如何在 GWT 中使用增量命令
Posted
技术标签:
【中文标题】如何在 GWT 中使用增量命令【英文标题】:How can I use Incremental Command in 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);
如果我遗漏了什么,请告诉我。
【问题讨论】:
【参考方案1】:IncrementalCommand
已被弃用。现在你应该使用:Scheduler.RepeatingCommand
或 Scheduler.scheduleIncremental()
除此之外,在成功答案之前执行查询是正常的,因为 RPC 是异步的(在该部分启动一个新线程),因此,您应该在 onServiceSuccess
和 onServiceFailure
上控制您的代码(基本上根据您的要求对这些方法进行查询)。
其他选项是使用在 GQuery 上实现的 Promises 模式。就像是 doTheRPC(...).done(...).always(...); (但如果您对 GWT 没有太多经验,则上面描述了最简单的解决方案)。
【讨论】:
以上是关于如何在 GWT 中使用增量命令的主要内容,如果未能解决你的问题,请参考以下文章