2012-08-02 2 views
1

사용자가 창을 닫거나 새로 고치거나 뒤로 버튼 을 클릭했지만 한 페이지에 대해서만을 클릭하면 RPC 호출을 실행하려고합니다. 나는 처리에 대해 이야기하는 게시물을 찾았지만 해결책은 잘 작동하지 않습니다. 뒤로 단추 처리기 (작동하지 않음)가 누락되었습니다. 항상 웹의 모든 페이지에 대해 페이지를 떠나면 제거 처리기를 찾을 수 없습니다.GWT 핸들 백, 새로 고침, 닫기 버튼

Window.addWindowClosingHandler(new Window.ClosingHandler() { 

       @Override 
       public void onWindowClosing(ClosingEvent event) { 
        event.setMessage("You sure?"); 
       } 
      }); 

    Window.addCloseHandler(new CloseHandler<Window>() { 

       @Override 
       public void onClose(CloseEvent<Window> event) { 

        // Execute code when window closes! 
       System.out.println("ble ! "); 

       } 
      }); 

프레임 워크 : GVT 2.4 with mvp4g.
브라우저 : FF 및 Chrome.

+0

"작동하지 않음"은 문제에 대한 설명이 아닙니다. 무슨 일 이니? 오류가 있습니까? 코드가 호출되지 않습니까? http://stackoverflow.com/faq#howtoask – Strelok

+0

뒤로 버튼을 누르면 메시지 대화 상자가 표시되지 않습니다. 브라우저/탭을 닫거나 URL을 변경하거나 대화 상자를 실행하는 것과 달리 달리 작동하지 않습니다. – gfelmer

답변

0

페이지를 종료 할 때 처리기를 제거한 다음 페이지를 다시 입력 할 때 다시 추가해야합니다. 위의 코드로 덮여있는 "추가"면이 있습니다. "제거"부분이 없습니다. add*Handler 메서드에서 반환 된 HandlerRegistration 개체를 사용하면됩니다. 당신이 등록 된 처리기를 제거 할 때, 당신은 단지 HandlerRegistration.removeHandler() 메서드를 호출 : 나는 거기에 해결책을 발견 프레임 워크를 mvp4g 사용하기 때문에

HandlerRegistration windowClosingHandler = Window.addWindowClosingHandler(new ClosingHandler() { 
    @Override 
    public void onWindowClosing(ClosingEvent event) { 
     // Handle window closing 
    } 
}); 
// From now on the CloseHandler will be fired 

// ... 
// Somewhere else: 
windowClosingHandler.removeHandler(); 
// From now on the CloseHandler won't be fired 
+0

Igor, removeHandler 작동하지만 사용자가 뒤로 버튼을 클릭하면 onClose (CloseHandler)가 실행되지 않고 핸들러를 제거 할 수 없습니다. – gfelmer

1

을, 당신은에이 CyclePresenter와 발표자를 확장하고는 onLoad 및으로 onUnload 메서드를 재정의해야합니다. 이 메소드는 뷰가 DOM에서로드/언로드 될 때 시작되며, 모든 경우에 대해 테스트하고 작동합니다. f5, 뒤로 버튼, 브라우저/탭 닫기, 다른 웹으로 이동 및 다른 이벤트 호출. 이제 나는 거기에 몇 가지 코드를 넣을 수 없습니다.