GWT には、リクエストの fire メソッドを使用して DB から DATA を取得するメソッドがあります。非同期であることはご存知のとおりです。JS からこのメソッドを呼び出しているので、同期する必要があります。
private static String retriveLocation(String part)
{
ClientFactory clientFactory = GWT.create(ClientFactory.class);
MyRequestFactory requestFactory = clientFactory.getRequestFactory();
YadgetRequest request = requestFactory.yadgetRequest();
String criteria = "!" + part;
final ArrayList<String> tags = new ArrayList<String>();
request.getTagsStartingWith(criteria, 10, 0).fire(
new Receiver<List<TagProxy>>() {
@Override
public void onSuccess(List<TagProxy> tagList) {
String output = "[";
for (TagProxy pt : tagList) {
output += "{";
output += "\"id\":" + "\"" + pt.getId() + "\",";
output += "\"value\":"
+ "\""
+ pt.getName().replaceAll("\"", "")
.replaceAll("!", "") + "\"";
output += "},";
}
if (output.length() > 2)
output = output.substring(0, output.length() - 1);
output += "]";
tags.add(output);
}
@Override
public void onFailure(ServerFailure error) {
}
});
return tags.size() + "";
}
次のように JS からこの関数を呼び出します。
public static native void exportStaticMethod() /*-{
$wnd.computeLoanInterest =
$wnd.getAutocomplete =@com.yadget.client.Yadget::retriveLocation(Ljava/lang/String;);
}-*/;
と内部でonModuleLoad()
私は呼び出しますexportStaticMethod()
。
そしてhtmlには、次のようにonclickを呼び出すボタンがありますgetAutocomplete()
。
<input type="button" onclick="alert(getAutocomplete('j'))" value="momo" />
問題は、メソッドが非同期であるため、サイズが常に 0 を返すことですが、値を返すことができればonSuccess
問題は解決します。アイデアはありますか?2日間グーグルで検索しましたが、答えがありませんでした。
言い換えると:
私はJSメソッドを持っています.Javaメソッドを呼び出してDBからデータを取得する必要がありますが、同期的に!
例
HTML ボタンがあり、クリックすると ID が関数に渡され、GWT を介して DB から名前を取得して警告する必要があります。GWT は非同期であるという理由だけで、毎回そうすることができず、結果を警告すると、まだ満たされていないため空になります。