Chamada síncrona do GWT
Eu tenho um método no GWT que recupera os dados do banco de dados usando o método de fogo dos pedidos como todos sabem seu assíncrono Eu estou chamando esse método de JS, então eu preciso fazer síncrono é possível
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() + "";
}
e chamando essa função do JS assim:
public static native void exportStaticMethod() /*-{
$wnd.computeLoanInterest =
$wnd.getAutocomplete [email protected]::retriveLocation(Ljava/lang/String;);
}-*/;
e dentroonModuleLoad()
Eu chamoexportStaticMethod()
.
e em html eu tenho um botão eu chamo onclickgetAutocomplete()
como isso:
<input type="button" onclick="alert(getAutocomplete('j'))" value="momo" />
O problema é que o tamanho sempre retorna 0 porque o método é assíncrono, mas se eu pudesse retornar o valoronSuccess
isso resolveria meu problema. Alguma idéia por favor? Eu pesquisei por 2 dias e não obtive resposta.
Em outras palavras:
Eu tenho o método JS eu preciso chamar o método java para recuperar dados do banco de dados, mas de forma síncrona!
Exemplo
Se eu tiver um botão HTML e ao clicar, passarei a ID para uma função e precisarei recuperar o nome do banco de dados via GWT e alertá-lo; simplesmente porque o GWT é assíncrono, eu não serei capaz de fazê-lo toda vez e quando eu alertar o resultado, será um vazio porque ainda não foi preenchido.