Połączenie synchroniczne GWT
Mam metodę w GWT, która pobiera dane z bazy danych przy użyciu metody ognia żądań, jak wszyscy wiedzą, jego asynchroniczny Wywołam tę metodę z JS, więc muszę zrobić synchroniczne jest to możliwe
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() + "";
}
i wywołanie tej funkcji z JS w ten sposób:
public static native void exportStaticMethod() /*-{
$wnd.computeLoanInterest =
$wnd.getAutocomplete [email protected]::retriveLocation(Ljava/lang/String;);
}-*/;
i w środkuonModuleLoad()
DzwonięexportStaticMethod()
.
w html mam przycisk, który nazywam onclickgetAutocomplete()
lubię to:
<input type="button" onclick="alert(getAutocomplete('j'))" value="momo" />
Problem polega na tym, że rozmiar zawsze zwraca 0, ponieważ metoda jest asynchroniczna, ale jeśli mógłbym zwrócić wartośćonSuccess
to rozwiąże mój problem. Masz jakieś pomysły? Googluję go przez 2 dni i nie mam odpowiedzi.
Innymi słowy:
Mam metodę JS Potrzebuję jej, aby wywołać metodę java, aby pobrać dane z DB, ale synchronicznie!
Przykład
Jeśli mam przycisk HTML i po kliknięciu, przekażę ID do funkcji i muszę ponownie pobrać nazwę z bazy danych za pomocą GWT i powiadomić o tym; po prostu dlatego, że GWT jest asynchroniczny, nie będę w stanie tego robić za każdym razem, a kiedy powiadomię o wyniku, będzie pusty, ponieważ nie jest jeszcze wypełniony.