以下のコードでは、インクリメンタル コマンドが期待どおりに機能していません。以下のラジオ ボタンを選択すると、製品の 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);
見逃したものがある場合はお知らせください。