我希望通过RPC接收键入的List,然后将其链接到ListDataProvider。然后ListDataProvider必须在CellTable中显示此列表。但是我从RPC获得的List没有出现在CellTable中。 我创建了一个没有RPC的简单列表,并将其链接到ListDataProvider。此列表已成功显示。 在调试器的帮助下,我发现这两个列表(变量)之间存在差异:
这里我通过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;
}
请告诉我,我做错了什么?
答案 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())