У меня есть метод в GWT, который извлекает данные из БД с использованием метода пожара запросов, так как вы все знаете его асинхронный. Я вызываю этот метод из JS, поэтому мне нужно сделать синхронный, это возможноGWT Синхронный вызов
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 [email protected]::retriveLocation(Ljava/lang/String;);
}-*/;
и внутри onModuleLoad()
я называю exportStaticMethod()
.
и в HTML У меня есть кнопка, я называю OnClick getAutocomplete()
так:
<input type="button" onclick="alert(getAutocomplete('j'))" value="momo" />
Проблема заключается в том, что размер всегда возвращает 0, так как метод асинхронно, но если бы я мог вернуть значение onSuccess
, что бы решить моя проблема. Любые идеи, пожалуйста? Я уже 2 дня искал его и не получил ответа.
Другими словами:
У меня есть метод JS Мне нужно вызвать метод Java для извлечения данных из БД, но синхронно!
Пример
Если у меня есть кнопка HTML и нажмите пройду идентификатор функции и мне нужно retrive имя из БД с помощью GWT и предупредить его; просто потому, что GWT является асинхронным, я не буду в состоянии делать это каждый раз, и когда я предупреждаю результат, он будет пустым, потому что он еще не заполнен.
RPC-вызов - это асинхронный вызов, поэтому он попытается вернуть tag.size до того, как вызов rpc не будет завершен. так что это неверно логически. поместите sysout для tags.size в успех и удалите оператор return. Сделайте код внутри успеха, если вам нужна подробная информация о тегах. – iMBMT
@Bhumika I c, но, как вы видите в моем [ost, я называю это функцией javascript и значением, которое должно быть exisit, когда я вызываю его из javascript, поэтому мне нужно добавить возвращаемое значение, есть ли какая-нибудь работа вокруг? –
Таким образом, вы не можете получить правильный список тегов в return statement.but, см. Jsni. создайте другой метод, который вызовет java для javascript. назовите его успешным после установки списка тегов. это будет работать. – iMBMT