リストビューが必要なのは、パネルのタイプ、リストビューでロジックを追加するモデル、少なくとも2つのフォーム、ユーザーが追加するデータを選択するドロップダウン用、最後にデータ全体を送信するためのモデルを使用できるためです。リストビュー。AJAXを使用できますが、オプションです
フォームコンポーネントでリピーター(ListViewは高度なリピーター)を使用する方法を知るために、ここで彼の基本的な使用法を知ることができます。ここでフォームコンポーネントでの使用法について、そして最後にここでAJAXでの使用方法を知ることができます。
ところで、私は例を持っています、ここにコードの重要な部分があります。
これはListView.classのpopulateItemメソッドです
@Override
protected void populateItem(ListItem<ListViewModel> item) {
item.add(new TextField<Integer>("quantity", new PropertyModel<Integer>(item.getDefaultModelObject(),
"averageQuantity"));
item.add(new TextField<Integer>("position", new PropertyModel<Integer>(item.getDefaultModelObject(), "order"))
.add(new IntegerValidator()));
item.add(new Label("description", item.getModelObject().getName()));
item.setOutputMarkupId(true);
}
他の場所では、ドロップダウンを自分のフォームに追加してから、送信時にたとえばlistViewオブジェクトを操作する必要があります。
// I use a AjaxButton to perform the user submit if you don't
// want use it, you should reload the entire page
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
//redraw the parent of the list view
target.add(theContainerOfTheListView);
//the submited model of the dropdown
ListViewModel item = form.getObject();
List<ListViewModel> list = listViewObject.getObject();
list.add(item);
//you could sort the list object in order to sort the listViewObject
}
更新:新しいアイテムをリストビューに追加する前に、リストビューのフォームコンポーネントを送信する必要があります。送信しないと、ユーザーの変更が失われます。