2013-04-22 71 views
0


我是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,
你有什么建议吗?任何想法?我相信这对于专家来说是个简单的问题。

编辑:
用户可以刷新表点击一个按钮的数据,此事件的处理程序将执行到服务器的请求,但该请求只在第一次点击发送。

回答

0

基本上有两种选择,第一种是在服务器端将标头Cache Control设置为no-cache,而如果无法修改服务器端的代码(例如在遗留应用程序的情况下),则可以附加随机数在您的请求中的一个参数。一个请求将有一个uri,并附加一个随机生成的参数http:\\mydomain.com\something?random=12345。两个不同的请求会有不同的数字,第二个请求中第一个请求的响应会被忽略。这不是一个聪明的做法,但它有效。

-1

为了使像这样的数据更好地使用HTTP POST请求,因为正在缓存GET请求(通过GWT,代理服务器...)。

此外请确保您的服务器代码删除项目是做正确的工作,并手动检查服务器响应在萤火虫或在铬控制台,看看你的回应是否包含删除记录。

请张贴您用来填充弹性表的代码,您是否在重新填充数据之前清除它?

编辑:

link

如果您可以使用celltable http://gwt.googleusercontent.com/samples/Showcase/Showcase.html#!CwCellTable(因为它包含下面显示的元素列表)或使用某些集合(ArrayList)来保存FlexTable显示的数据。然后,您可以轻松修改该集合并从中重新绘制Flex表格。

+0

GET不是问题。问题是,如果数据不应该被缓存,那么响应应该这样说。缓存它可以,但客户端不想使用它的缓存数据,那么它应该在请求中说明(设置'Cache-Control:no-cache'头部)。 – 2013-04-22 10:17:09

+0

是的,您可以为GET设置Cache-Control,或者只是更改POST的请求类型,我认为使用POST更优雅。使用GET进行任何类型的数据提取都是很丑陋的做法,如果您没有意识到它的局限性(如URI长度,需要对所有参数进行编码等),会导致很多痛苦。 – 2013-04-22 10:24:09

+0

是的,正是托马斯。以前,我试图设置'Cache control:no-cache',它工作。但是,我不确定这是否是一种好的做法,因为我们需要缓存数据,此外,与服务器的大量交互将会过于昂贵。 – daniele 2013-04-22 10:27:22

相关问题