Gwt Anfrage-generator - wie die Rückkehr der Antwort-string
Muss ich implementieren Sie eine Funktion, die einen Webdienst aufruft und die Antwort zurückgegeben wird.
Versuchte ich
public String getFolderJson(String path) {
String result="initial_value";
StringBuilder param = new StringBuilder();
param.append("?sessionId=").append(getSessionId());
param.append("&path=").append(path);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "https://localhost/folder" + param);
try {
builder.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request,
Response response) {
result = response.getText();
System.out.println(response.getText());
//I need to return "result"
}
@Override
public void onError(Request request, Throwable exception) {}
});
return result; //the result get returned before the response is recieved.So i am getting the return value "initial_value".
}
catch (RequestException e) {}
return null;
}
Aufrufen getFolderJson()
Webservice-Aufruf erfolgreich. Aber result
zurückgegeben wird, bevor die respnse eingegangen ist. Also ich bin immer der retunr Wert "initial_value".
Wie die Rückkehr der Wert aus der Antwort, wenn getFolderJson()
Funktion ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
GWT unterstützt keine synchronen Ajax, also müssen Sie code Ihrer app mit asynchronen Muster.
Den low-level-Objekt, das GWT verwendet, um die Anforderung durchzuführen, ist eine XMLHttpRequest (außer für alte IE-Versionen), und GWT immer die Anrufe es ist
open()
Methode mit " async auf true gesetzt. Also ist der einzige Weg, um synchrone ajax-Pflege Ihrer eigenen modifizierten version vonXMLHttpRequest.java
. Aber synchrone ajax ist eine schlechte Idee, und auch jQuery veraltet diese Möglichkeit.So ist der normale Weg in gwt werden sollte, dass Ihre Methode gibt
void
, und Sie geht einem weiteren parameter ein callback ausgeführt werden, wenn die Reaktion verfügbar ist.Ich würde eher gwtquery
Promises
syntax für diese statt der Anfrage-generator einen:getFolderJson(...)
wenn die Komponente fragt nach foder details. Ich kann es nicht mit dem callback-Muster.getFolderJson
so wie wir eine Lösung finden könnten. Jedenfalls in dem Fall, dass Sie weiterhin nutzen wollen, die synchrone Ajax (was ich von abraten), kopieren Sie nur dieXMLHttpRequest.java
mit seinem vollständigen Pfad in Ihrem Projekt und ändern Sie die Zeilethis.open(httpMethod, url, true);
mitthis.open(httpMethod, url, false);
Ich denke, der Baumeister.sendRequest(xxx) wird wieder so etwas wie eine Zukunft,und Sie können das Ergebnis von diesem Objekt.Was Sie verwenden, ist eine asynchrone Methode, RequestBuilder,sollte es eine synchrone Methode als gut.
was bedeutet RequestBuilder kommen? Kann ich die api für Sie.
OK,versuchen Sie dies:
Scheint es RequestBuilder keine Synchrone Methode, um das Ergebnis nur einen Rückruf.
Vorsichtig sein, diese Methode blockiert, bis die Antwort eingegangen ist.
Wenn diese Methode aufgerufen wird, in einem event processing thread von gwt,wäre dies eine schlechte Praxis.
Versuchen, die gleiche Lösung angeboten (siehe oben) nicht mit einem anonymen Callback.