【发布时间】:2012-06-23 04:48:59
【问题描述】:
我在 GWT 中有一个方法,它使用请求的 fire 方法从数据库中检索 DATA,因为你们都知道它是异步的
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 从数据库中检索名称并提醒它;仅仅因为 GWT 是异步的,我不能每次都这样做,当我提醒结果时,它会是一个空的,因为它还没有被填充。
【问题讨论】:
-
RPC 调用是异步调用,因此即使 rpc 调用未完成,它也会尝试返回 tags.size。所以在逻辑上是不正确的。将tags.size的sysout成功并删除return语句。如果您必须要求标签列表详细信息,请在成功内编写代码。
-
@Bhumika I c 但正如你在我的 [ost 我从 javascript 函数调用它并且当我从 javascript 调用它时存在的值所以我必须输入返回值有没有解决方法?
-
这样你不能在return statement.but中得到正确的标签列表。但是参考jsni。创建另一个将调用 java 到 javascript 的方法。设置标签列表后调用它成功。这将有效。
-
@Bhumika 真的很感谢你的建议,但它仍然不能帮助我完成我的工作!我的业务需要是让 JS 函数从数据库中检索数据,但它必须是同步的
标签: gwt asynchronous sync synchronous jsni