Estoy trabajando en un proyecto GWT donde ASP.NET es mi única opción en el servidor. He descubierto que, si bien requiere un poco de trabajo adicional, los tipos JavaScript Overlay pueden hacerlo más fácil. No importa qué tecnología esté usando su servidor, siempre que pueda responder con datos serializados de JSON. Por ejemplo, si usted tiene una clase de contacto en C#:
public class Contact
{
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Email { get; set; }
}
El diseño de su servidor para que devuelva esta serializado como JSON. Uso ASP.NET MVC para esto porque requiere muy poco trabajo.Aquí hay un ejemplo muy sencillo, donde vamos a suponer que el contacto tiene un método estático que, dado un id, devolverá una instancia de contacto:
public class ContactController : Controller
{
public ActionResult GetContact (int id)
{
return Json(Contact.GetById(id), JsonRequestBehavior.AllowGet);
}
}
Ahora, en su aplicación GWT, crear un tipo de superposición JavaScript para su Contacto :
import com.google.gwt.core.client.JavaScriptObject;
public class Contact extends JavaScriptObject {
protected Contact() { }
public final native int getContactId() /*-{ return this.Id; }-*/;
public final native String getLastName() /*-{ return this.LastName; }-*/;
public final native String getFirstName() /*-{ return this.FirstName; }-*/;
public final native String getEmail() /*-{ return this.Email; }-*/;
public static final native Contact createFromJson(String json) /*-{
return eval('(' + json + ')');
}-*/;
}
a continuación, en su proyecto GWT, utilice una petición HTTP para comunicarse con el servidor:
public class ContactLoader {
private int id;
public ContactLoader(int id) {
this.id = id;
}
public void beginLoad() {
String url = "/YourService/GetContact/?id=" + id;
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
try {
@SuppressWarnings("unused")
builder.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request req, Response resp) {
Contact contact = Contact.createFromJson(req.getText());
// do something with your contact. In my project, I
// fire an event here for which the contact is the payload
}
@Override
public void onError(Request request, Throwable exception) {
// handle your error
}
catch (Exception exception) {
// handle your error
}
}
}
también es posible utilizar tipos genéricos con los tipos de superposición. Por ejemplo, nunca devuelvo un objeto simple, siempre utilizo un contenedor genérico para el transporte para que pueda manejar fácilmente los informes de errores en el lado del cliente.
C#:
public class ServerResponse<T>
{
public T Payload { get; set; }
public bool Success { get; set; }
public String Message { get; set; }
}
Java:
public class ServerResponse<T extends JavascriptObject>
extends JavaScriptObject {
protected ServerResponse() { }
public final native T getPayload() /*-{ return this.Payload; }-*/;
public final native boolean getSuccess() /*-{ return this.Success; }-*/;
public final native String getMessage() /*-{ return this.Message; }-*/;
}
Esto me permite devolver mi contacto, una serie de contactos o lo que sea. También ayuda a reducir la duplicación en la lógica de carga de datos.
Este es un ejemplo demasiado simple, pero con suerte es suficiente para despejar el camino a cualquiera que necesite ayuda con un back-end que no sea Java. Otro recurso que encontré útil que analiza los tipos de superposición es "JSON Parsing with JavaScript Overlay Types in GWT" de Matt Raible.
Derecho, solo tendría que volver a implementar la misma API que se encuentra en su biblioteca J2EE de ejemplo como un enrutamiento de aplicaciones ASP.NET para manejadores de procedimientos remotos, tal vez utilizando ASP.NET MVC. – Skeolan
eso solo es cierto si desea usar su mecanismo RPC incluido. Ese mecanismo puede ser reemplazado por un mecanismo RPC respaldado por json (busqué en Google gwt json rpc y obtuve un par de resultados), o incluso puede usar un mecanismo RPC respaldado por REST (pruebe esto http://code.google.com/p/ gwt-rest /, o google para más, hay un par). Es decir, el mecanismo RPC es reemplazable, y hay bibliotecas que ya lo hacen. – Chii