문제

나는 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;
  }
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top