我們正在Wicket中開發一個新應用程序,並遇到一個小問題。
在Wicket中更新數據表
我們做什麼:
1)創建一個新的SortableDataProvider
2)創建一個新的DefaultDataTablePagingInBottom
3)創建一個新的WebMarkupContainer
4)DefaultDataTablePagingInBottom添加到WebMarkupContainer
5)創建一個新的AjaxCheckBox
6)在AjaxCheckBox的onUpdate中,將WebMarkupContainer添加到AjaxRequestTarget中7)將SortableDataProvider設置爲新的SortableDataProvider(與更新的查詢)
8)DefaultDataTablePagingInBottom.replaceWith(新DefaultDataTablePagingInBottom - 與新的供應商)。
什麼happends:
1)點擊複選框 - >沒什麼happends。
2)再次單擊 - > crash:「最後一個原因:只能在已經添加到其父級的組件上調用此方法
WicketMessage:接口org.apache.wicket.behavior.IBehaviorListener的onRequest方法在[email protected]靶向於成分[[組件ID =複選框]]拋出異常」
3)在瀏覽器中點擊後面 - >我過濾與列表新的提供者。
任何想法?編輯--- 這是一些代碼。
1)在所述網頁中的構造:
model = new Model(projectPlannerService);
provider = new SortableProjectDataProvider(model, (WebSession) getSession(), isChecked);
table = new DefaultDataTablePagingInBottom("table", columns, provider, 50);
listContainer = new WebMarkupContainer("wmc");
listContainer.add(table);
add(listContainer.setOutputMarkupId(true));
/*
* checkbox för filtrering
*/
AjaxCheckBox checkBox = new AjaxCheckBox("checkBox", new Model()) {
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.add(listContainer, "wmc");
isChecked = !isChecked;
provider = new SortableProjectDataProvider(model, (WebSession) getSession(), isChecked);
updateTable();
}
};
add(checkBox);
2)在updateTable():
table.replaceWith(new DefaultDataTablePagingInBottom("table", columns, provider, 50));
3)SortableProjectDataProvider:
// Constructor
public SortableProjectDataProvider(IModel<?> model, WebSession webSession, boolean isChecked) {
this.model = model;
this.projectPlannerService = (ProjectPlannerService) model.getObject();
this.webSession = webSession;
setSort("customer", SortOrder.ASCENDING);
System.out.println("ischecked:" + isChecked);
if(!isChecked)
list = ((ProjectPlannerService) model.getObject()).findAllProjects();
else
list = ((ProjectPlannerService) model.getObject()).findAllActiveProjects();
System.out.println("size: " + list.size());
comparator = new ProjectComparator();
}
public Iterator<Project> iterator(int first, int count) {
Collections.sort(list, comparator);
if (first > list.size()) {
first = 0;
}
if (first + count > list.size()) {
return list.subList(first, list.size()).iterator();
} else {
return list.subList(first, first + count).iterator();
}
}
public IModel<Project> model(Project object) {
return new DetachableProjectModel((Project) object);
}
public int size() {
return list.size();
}
private class DetachableProjectModel extends LoadableDetachableModel {
private Long id;
@SpringBean
ProjectPlannerService projectPlannerService;
public DetachableProjectModel(Long id) {
Injector.get().inject(this);
if (id == null) {
throw new IllegalArgumentException();
}
this.id = id;
}
public DetachableProjectModel(Project project) {
this(project.getPk());
Injector.get().inject(this);
}
public int hashCode() {
return id.hashCode();
}
public boolean equals(final Object obj) {
if (obj == this) {
return true;
} else if (obj == null) {
return false;
} else if (obj instanceof DetachableProjectModel) {
DetachableProjectModel other = (DetachableProjectModel) obj;
return other.id == this.id;
}
return false;
}
protected Object load() {
return ((ProjectPlannerService) model.getObject()).findProjectById(id);
}
}
}
檢票口:延長
-input檢票:ID = 「CHECKBOX」 類型= 「複選框」 - 顯示活性 - /輸入 -
-div檢票:ID = 「WMC」 -
-table檢票:ID = 「表」 - /表 -
-/div-
- /檢票:extend-
提前感謝!
/安德烈亞斯
請張貼一些代碼 –
沒有代碼的問題很難回答! –