vaadin でカスタム コンポーネントを構築しようとしています。コンポーネントにはパネル内のオブジェクトのリストがあり、定義した BeanItemContainer を反復処理して手動で取得します。基本的には正常に動作します。クリックするたびにリストに新しい要素を追加する追加ボタン。追加ボタンをクリックすると、いくつかのフィールドと保存ボタンを含むウィンドウがポップアップします。ウィンドウの保存ボタンをクリックすると、新しいアイテムがデータベースに保存されます。これで、新しいアイテムを作成してコンテナーに保存できます。ただし、UI (リスト) を更新または更新して、新しいオブジェクトがlist.再描画リスナーを追加するか、リスト パネルなどを常に再描画するスレッドを作成する必要がありますか?どうすればよいですか?提案やヒントをありがとうございます。以下は、メイン コンポジットとリストを定義するコードです。
public adminComposite(String listType,String objectType,Container source) {
this.container=source;
mainLayout = new VerticalLayout();
panel = buildPanel(source);
label =new Label(listType);
mainLayout.addComponent(label);
mainLayout.addComponent(panel);
setCompositionRoot(mainLayout);
}
private Panel buildPanel(Container c) {
Panel bpanel = new Panel();
bpanel.setHeight("400px");
// verticalLayout_1
panelLayout = (VerticalLayout)bpanel.getContent();
//iterate the container to fetch all Items
for(Iterator i=c.getItemIds().iterator();i.hasNext();){
//get current Item id,then get a item
Object id = i.next();
Item it =c.getItem(id);
// get data out of the item and fill them into the horizontalLayout
String caption =(String)(it.getItemProperty("caption").getValue());
String shortmsg = (String)(it.getItemProperty("sms").getValue());
Date time = (Date)(it.getItemProperty("timestamp").getValue());
int uid = (Integer)(it.getItemProperty("uid").getValue());
HorizontalLayout newline = buildHorizontalLayout(uid,caption,shortmsg,time);
newline.setSizeFull();
panelLayout.addComponent(newline);
}
add = new Button("Add New");
add.setDescription("Add a new object in the list and database");
bpanel.addComponent(add);
panelLayout.setSpacing(true);
panelLayout.setMargin(true);
return bpanel;
}