우리는 Wicket에서 새로운 애플리케이션을 개발 중이며 작은 문제에 부딪 혔습니다.
Wicket에서 datatable 업데이트
우리가하는 일 :
1) 작성) 새로운 SortableDataProvider
2) 새로운 DefaultDataTablePagingInBottom
3) 새로운 WebMarkupContainer
4) WebMarkupContainer
5에 DefaultDataTablePagingInBottom 추가를 만들을 만들을 만들 새로운 AjaxCheckBox
6) AjaxCheckBox의 onUpdate에서 WebMarkupContainer를 AjaxRequestTarget에 추가하십시오.
7) SortableDataProvider를 새 것으로 설정하십시오 SortableDataProvider (업데이트 된 쿼리 사용)
8) DefaultDataTablePagingInBottom.replaceWith (새 DefaultDataTablePagingInBottom - 새 공급자 사용). happends 무엇
:
1) 체크 박스를 클릭 -> 아무것도 happends 없습니다.
2) 다시 클릭하십시오 -> 크래시 : "마지막 원인 :이 메서드는 부모에 이미 추가 된 구성 요소에서만 호출 할 수 있습니다 ..
WicketMessage : 인터페이스 org.apache.wicket.behavior.BehaviorListener의 onRequest 메서드 컴포넌트 [[Component id = checkBox]]의 [email protected]를 대상으로 한 경우 예외가 발생했습니다.
3) 브라우저에서 다시 클릭 -> 내가 필터링 한 목록 새로운 공급자.
아이디어가 있으십니까?
--- 편집 --- 여기에 몇 가지 코드가 있습니다.
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);
}
}
}
웹 페이지 생성자에서1)
wicket : extend 012 3, -input 개찰구 : ID = "체크 박스"유형 = "체크 박스"- 쇼 활성 -/입력 -
-div 개찰구 : ID = "WMC"-
- 테이블 개찰구 : ID = "테이블"-/테이블 -
-/div-
-/개찰 : extend-
사전에
감사합니다!
/안드레아스
일부 코드를 게시하십시오 –
코드없이 답하기가 어렵습니다. –