我在 GWT 中有一个方法,它使用请求的 fire 方法从数据库中检索数据,因为你们都知道它是异步的,我从 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 中我有一个按钮,我getAutocomplete()
像这样调用 onclick:
<input type="button" onclick="alert(getAutocomplete('j'))" value="momo" />
问题是大小总是返回 0,因为该方法是异步的,但是如果我可以返回onSuccess
可以解决我的问题的值。请问有什么想法吗?我已经在谷歌上搜索了 2 天,但没有得到任何答案。
换句话说:
我有 JS 方法我需要它来调用 java 方法来从 DB 中同步检索数据!
例子
如果我有一个 HTML 按钮并且单击时我会将 ID 传递给一个函数,我需要通过 GWT 从数据库中检索名称并提醒它;仅仅因为 GWT 是异步的,我不能每次都这样做,当我提醒结果时,它会是一个空的,因为它还没有被填充。