2016-07-28 3 views
2

버튼 클릭 후 간격을 시작하려고합니다.버튼 클릭 개찰 후 시작 간격

button = form.add(new AjaxButton("button") { 
    @Override 
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
     AjaxSelfUpdatingTimerBehavior ajaxSelfUpdatingTimerBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) { 
      private static final long serialVersionUID = 1L; 

      @Override 
      protected void onPostProcessTarget(AjaxRequestTarget target) { 
       logger.debug("onPostProcessTarget"); 
      } 

     }; 
     this.add(ajaxSelfUpdatingTimerBehavior); 
    } 
    }); 
}); 

이전 AjaxSelfUpdatingTimerBehavior는 버튼 클릭 후 시작되지 않습니다. 어떻게 시작할 수 있습니까? 내가 그들 모두 시작 이전 블록

button.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) { 
    private static final long serialVersionUID = 1L; 

    @Override 
    protected void onPostProcessTarget(AjaxRequestTarget target) { 
     logger.debug("onPostProcessTarget2"); 
    } 

}); 

후이 같은 새로운 하나를 추가하면

이상한 것은

이다. 그러나 마지막 하나도 내가 원하지 않는 돔을 업데이트합니다.

버튼 클릭 후 어떻게 간격을 시작할 수 있습니까? (첫 번째 코드 스 니펫과 유사)

답변

2

정규 양식 제출과 달리, 아약스 양식 제출 (여기에서와 같이 아약스 버튼을 통해)은 사용자가 명시 적으로 다시 렌더링하지 않겠다고 명시하지 않은 항목을 다시 렌더링하지 않습니다. 그것에 target.add(...)를 수행.

이것은 구성 요소 계층 구조 또는 구성 요소 자체에 대한 변경 사항 (새로운 비헤이비어 추가와 같은)은 개별 구성 요소를 업데이트하거나 전체 구성 요소를 다시 렌더링 할 때까지 백엔드 상태로 유지된다는 것을 의미합니다 페이지.

ajax 요청의 모든 상태 변경을 전파하려면 양식 제출시 target.add(this)으로 전화하십시오. 이렇게하면 개찰자가 구성 요소를 업데이트하고 프런트 엔드에 새로운 동작을 추가하게됩니다.

코드는이 다음과 같이한다

그래서 주어진 귀하의 예제 : 그래서

button = form.add(new AjaxButton("button") { 
    @Override 
    protected void onSubmit(AjaxRequestTarget target, Form<?> form) { 
     AjaxSelfUpdatingTimerBehavior ajaxSelfUpdatingTimerBehavior = new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)) { 
      private static final long serialVersionUID = 1L; 

      @Override 
      protected void onPostProcessTarget(AjaxRequestTarget target) { 
       logger.debug("onPostProcessTarget"); 
      } 

     }; 
     this.add(ajaxSelfUpdatingTimerBehavior); 
     target.add(this); 
    } 
    }); 
}); 
+0

당신은 내가 제거하면'(ajaxSelfUpdatingTimerBehavior) this.add 것을 말하는)'와'(button.add,'그 것 다시 렌더링하지 않습니까? – user3960875

+0

'button.add (secondBehavior)'를 제거하면 다시 렌더링되지 않습니다. 두 번째 동작은'AjaxButton'에서 변경된 내용을 페이지에 전달하는 동작입니다. – WiseTree