我是GWT的新手。我正在写一个页面的代码,要求一个包含两个集合的JSON对象,并使用其中一个集合来填充Flextable
。
这是我的JSON对象:如何从DOM中的集合中删除项目,GWT
public class Users extends JavaScriptObject {
protected Users() {
}
public final native JsArray<Link> getLinks() /*-{
return this.links;
}-*/;
public final native JsArray<User> getCollection() /*-{
return this.collection;
}-*/;
}
特别是我使用的第二个集合(称为collection
),以填补Flextable
。
但我的问题是,当我从表中删除一行时,即使我向服务器发送带有http删除方法的请求(并且服务器成功删除该项),当我尝试刷新表时,GWT不会生成对服务器的GET请求(即使它是用代码编写的)和用户对象也与以前一样使用已删除的项目。
我曾尝试使用这种方法从集合中删除此文件:
public static native void remove(JsArray<?> arr, int index, int count) /*-{
arr.splice(index, count);
}-*/;
....
remove(users.getCollection(), index, users.getCollection().length());
而且我也试过,另一种方法:
users.getCollection().set(index, null);
但在这两种情况下,我没有得到预期的结果,当我刷新表格时,我再次找到已删除的项目。
我认为我没有正确管理DOM,
你有什么建议吗?任何想法?我相信这对于专家来说是个简单的问题。
编辑:
用户可以刷新表点击一个按钮的数据,此事件的处理程序将执行到服务器的请求,但该请求只在第一次点击发送。
GET不是问题。问题是,如果数据不应该被缓存,那么响应应该这样说。缓存它可以,但客户端不想使用它的缓存数据,那么它应该在请求中说明(设置'Cache-Control:no-cache'头部)。 – 2013-04-22 10:17:09
是的,您可以为GET设置Cache-Control,或者只是更改POST的请求类型,我认为使用POST更优雅。使用GET进行任何类型的数据提取都是很丑陋的做法,如果您没有意识到它的局限性(如URI长度,需要对所有参数进行编码等),会导致很多痛苦。 – 2013-04-22 10:24:09
是的,正是托马斯。以前,我试图设置'Cache control:no-cache',它工作。但是,我不确定这是否是一种好的做法,因为我们需要缓存数据,此外,与服务器的大量交互将会过于昂贵。 – daniele 2013-04-22 10:27:22