0


我是 GWT 的新手。我正在编写一个页面的代码,它询问一个包含两个集合的 JSON 对象,我使用其中一个集合来填充Flextable.
这是我的 JSON 对象:

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 请求,(即使是写在代码中)和 Users Object 和之前一样,删除的 item 也一样。
我尝试使用此方法从集合中删除此项目:

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

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

4

2 回答 2

0

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

于 2013-04-23T08:40:38.087 回答
-1

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

还要确保您用于删除项目的服务器代码工作正常,并在 firebug 或 chrome 控制台中手动检查服务器响应,以查看您的响应是否包含已删除的记录。

请发布您用于填充弹性表的代码,您是否在再次填充数据之前清除它?

编辑:

链接

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

于 2013-04-22T10:12:30.153 回答