문제
나는 ajaxpagingnavigator가 있습니다. 기본적으로 특정 조건에서 AjaxPagingNavigator 페이지가 다시로드됩니다. 이런 일이 발생하면 목록에 1 페이지 이상이 포함되어있을 때만 네비게이터 만 렌더링하고 싶습니다.
따라서 핸들러를 첨부 할 수있는 곳을 아는 사람이 있으므로 AjaxPagingNavigator에서 가시성 조건을 확인하고 네비게이터를 통해 업데이트 될 때 가시성을 활성화/비활성화 할 수 있습니다. ajax 눈에 보이든지 아닌가?
마크 업 :
<div wicket:id="mainWrap">
<div wicket:id="navigator"/>
<div wicket:id="listWrap">
<div wicket:id="list><!-- here be content --></div>
</div>
</div>
따라서 "MainWrap"을 새로 고침하는 Ajax 이벤트가 있습니다. "Navigator"를 "목록"및 포장과 함께 새로 고쳐줍니다.
이것은 모든 것을 트리거하는 사건입니다.
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
List foo = null; // do work to get list
model.setFound(found); // update the model (thus updating "list")
target.addComponent(mainWrap);
}
편집 : 나는 내가 쓸 수 있다는 것을 안다
navigator.setVisibility(list.getPageCount() > 1);
네비게이터를 만들고 모델을 업데이트 한 후 AjaxPagingNavigator의 서브 클래스로이를 캡슐화하기를 바랐습니다.
해결책
우선 순위에서 값 비싼 계산에주의하십시오 isVisible
개찰구가 호출되는 방법 isVisible
요청 당 여러 번 - 부주의하게 전화를 걸지 않습니다.
일반적으로 이것에 대한 가장 좋은 방법은 onConfigure
가시성 플래그를 수동으로 설정하십시오.
@Override
void onConfigure() {
super.onConfigure();
setVisible(isVisible() && someExpensiveToCalculateCondition);
}
onConfigure
요청 처리 중에 한 번만 호출되며 보이지 않는 구성 요소를 포함하여 모든 구성 요소를 요구합니다. onBeforeRender
가시 구성 요소 만 요구됩니다).
다른 팁
개찰구를 만지 자마자 시간이 지났지 만 메모리가 제공되는 경우 :
"네비게이터"객체의 isvisible () 메소드를 무시할 수 없으므로 원하는 조건 하에서 만 표시되도록 할 수 있습니까?
예, 같은 것
.addComponent(new AjaxPagingNavigator(...) {
@Override public boolean isVisible() {
return model.getFound().size() > 25;
}
});