2009-10-31 5 views
7

Apache Wicket에서 AjaxSelfUpdatingTimerBehavior를 추가 한 다음 제거하는 데 문제가 있습니다. 동작이 추가되었지만 브라우저에서 곧 동작하는 "페이지 만료"가 발생하면 제거 작업이 깨끗하지 않기 때문에 동작을 제거하는 즉시 동작이 추가됩니다. 내 설정은 기본적으로 타이머 및 두 개의 링크 ("이동"및 "중지")로 변경되기 시작하는 레이블입니다. "go"를 클릭 한 다음 "stop"을 클릭 할 수 있기를 원합니다 (분명히 다른 방법으로는 작동하지 않을 것입니다!).Apache Wicket의 구성 요소에서 AjaxSelfUpdatingTimerBehavior를 올바르게 제거하려면 어떻게해야합니까?

<html>  
    <body>    
     <span wicket:id="message">message will be here</span><br/> 
     <a wicket:id="go">Go</a><br/>   
     <a wicket:id="stop">Stop</a>   
    </body> 
</html> 

여기 내 코드입니다 : 내가 개찰구 1.4.3을 사용하고

// imports all from standard wicket 
public class HomePage extends WebPage { 

    private static final int INTERVAL = 500; 

    public HomePage(final PageParameters parameters) { 

     final Component label = new Label("message", 
      "Hello").setOutputMarkupId(true); 

     add(label); 

     final IBehavior updater = new AjaxSelfUpdatingTimerBehavior(Duration 
      .milliseconds(INTERVAL)) { 
      @Override 
      protected void onPostProcessTarget(AjaxRequestTarget target) {      
       label.setDefaultModelObject(String.valueOf(System.nanoTime()));    
      } 
     }; 

     AjaxLink<String> go = new AjaxLink<String>("go") { 
      @Override 
      public void onClick(AjaxRequestTarget target) { 
       label.add(updater);        
       target.addComponent(label); 
      }   
     }; 

     AjaxLink<String> stop = new AjaxLink<String>("stop") { 
      @Override 
      public void onClick(AjaxRequestTarget target) { 
       label.remove(updater); 
       target.addComponent(label); 
      }   
     }; 

     add(go, stop); 
    } 
} 

가 여기 내 전체 마크 업입니다.

도움을 주시면 감사하겠습니다. 감사.

답변

3

이 문제는 완전히 동작을 제거하려고 시도하는 대신 stop() 메서드를 사용하여 해결되었습니다.

나는 실제로 합니까내 솔루션은 내가 "가라"때마다 행동을 새롭게하는 포함하고 내가 멈추고 계속 시작하고 백만 행동을 발생시키지 않고 시작하기 때문에 그것을 중지 한 후 완전히 제거하려는 경우) 그래서 나는 나중에 그 왕복 여행에서 제거 될 행동 목록을 유지함으로써 그것을 얻었습니다.

+0

또한 stop() 메서드를 사용하여 구현했습니다. 동작을 제거하는 것이 (수동으로) 정말로 필요한지 나는 모른다. 중지 된 경우 더 이상 실행되지 않습니다. 그리고 일단 사용자가 새로운 페이지를 열면 어쨌든 그 행동은 사라집니다. – Friederike

0

타이머 동작을 다시 사용하려면 AbstractAjaxTimerBehavior에서 restart() 또는 무언가를 호출하는 것이 좋을 것입니다.

관련 문제