无法通过RPC获取ListDataProvider的正确列表

时间:2013-06-10 10:42:07

标签: java gwt rpc celltable

我希望通过RPC接收键入的List,然后将其链接到ListDataProvider。然后ListDataProvider必须在CellTable中显示此列表。但是我从RPC获得的List没有出现在CellTable中。 我创建了一个没有RPC的简单列表,并将其链接到ListDataProvider。此列表已成功显示。 在调试器的帮助下,我发现这两个列表(变量)之间存在差异:

  • 从RPC获得的变量的结构是elementData-> [0],[1],...
  • 带有简单列表的变量的结构是列表 - > elementData-> [0],[1],...

这里我通过RPC发送List:

public List<Pravform> greetServer(String input) throws IllegalArgumentException {
...
TypedQuery<Pravform> query = em.createQuery("SELECT p FROM Pravform p",Pravform.class);
List<Pravform> categoryList = query.getResultList();
return categoryList; 
}

这里我将List链接到ListDataProvider。

public void onSuccess(List<Pravform> result) {
List<Pravform> listPf = dataProvider.getList();
listPf = result;        
}

请告诉我,我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题是DataListProvider的工作方式。您基本上只是要求其数据列表,然后您修改此列表。因此,在onSuccess中,您要求dataProvider为其提供List,并在其中存储其数据。您将该列表的引用存储在listPf中。但之后,您将listPf分配给完全不同的List。因此,在此步骤之前,listPf指向存储在表中的相同数据(listPf - &gt; List,其中包含表中的数据)。但之后它指向来自RPC的数据(listPf - &gt;结果)。很明显,您在CellTable中看不到对数据的更改,因为您没有更改它们。

解决方案应该是,在onSuccess中设置为DataListProvider你的新列表(我必须承认我没试过)

dataProvider.setList(result);

或者只使用dataProvider提供的列表(就像我一样)

public void greetServer(String input, List listFromDataProvider) throws IllegalArgumentException {
...
TypedQuery<Pravform> query = em.createQuery("SELECT p FROM Pravform p",Pravform.class);
listFromDataProvider.addAll(query.getResultList());
}

当您从RPC使用

调用此方法时
greetServer("someInput", dataProvider.getList())