0

RPC 経由で型指定されたリストを受け取り、それを ListDataProvider にリンクしたいと考えています。次に、ListDataProvider はこのリストを CellTable に表示する必要があります。しかし、RPC から取得した List は、CellTable には表示されません。RPC を使用しない単純なリストを作成し、それを ListDataProvider にリンクしました。このリストは正常に表示されました。デバッガーの助けを借りて、これら 2 つのリスト (変数) の違いを見つけました。

  • RPC から取得した変数の構造は elementData->[0],[1],...
  • 単純なリストを持つ変数の構造は、list ->elementData->[0],[1],... です。

ここでは、RPC 経由でリストを送信します。

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;        
}

教えてください、私は何を間違えましたか?

4

1 に答える 1

0

問題は、DataListProvider の動作方法です。基本的に、データのリストを要求してから、このリストを変更します。したがって、onSuccess では、dataProvider にデータを格納するリストを提供するように依頼します。そのリストへの参照を listPf に保存します。しかしその後、listPf にまったく別の List を割り当てます。したがって、このステップの前に、listPf はテーブルに格納されている同じデータを指していました (listPf -> テーブル内のデータを含むリスト)。しかし、その後は RPC からのデータを指します (listPf -> result)。したがって、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())
于 2013-06-10T16:05:38.913 に答える