是否有任何好的工具可用于将GWT(Google Web Toolkit)与ASP.Net服务器应用程序一起使用?GWT的编程模型和工具非常好,但是如果后端可以保留在C#/ ASP.Net中则会很好.
目前有一个很好的解决方案吗?
smc*_*hon 24
我正在开发一个GWT项目,其中ASP.NET是我在服务器上的唯一选择.我发现,虽然它需要一些额外的工作,JavaScript Overlay类型可以让它变得简单.无论您的服务器使用什么技术,只要它可以使用JSON序列化数据进行响应.例如,如果您在C#中有一个Contact类:
public class Contact
{
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
设计您的服务器,使其返回序列化为JSON.我使用ASP.NET MVC是因为它需要很少的工作.这是一个非常简单的例子,我们假设Contact有一个静态方法,给定一个id,它将返回一个Contact实例:
public class ContactController : Controller
{
public ActionResult GetContact (int id)
{
return Json(Contact.GetById(id), JsonRequestBehavior.AllowGet);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在您的GWT应用程序中,为您的联系人创建JavaScript覆盖类型:
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 + ')');
}-*/;
}
Run Code Online (Sandbox Code Playgroud)
接下来,在您的GWT项目中,使用HTTP请求与服务器通信:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
也可以使用具有覆盖类型的泛型类型.例如,我从不返回一个裸对象,我总是使用通用容器进行传输,这样我就可以轻松处理客户端的错误报告.
C#:
public class ServerResponse<T>
{
public T Payload { get; set; }
public bool Success { get; set; }
public String Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
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; }-*/;
}
Run Code Online (Sandbox Code Playgroud)
这让我可以返回我的联系人,一组联系人或其他什么.它还有助于减少数据加载逻辑中的重复.
这是一个非常简单的示例,但希望它足以为任何需要非Java后端帮助的人清除路径.我发现有助于讨论覆盖类型的另一个资源是Matt Raible的"使用GWT中的JavaScript覆盖类型进行JSON解析 ".
| 归档时间: |
|
| 查看次数: |
8196 次 |
| 最近记录: |