2012-07-23 5 views
1

양식이 있고 사용자가 뒤로 버튼을 누르면 확인 대화 상자를 표시하려고합니다. 나는 다시 버튼을 누르면) 나는이 짧은 시나리오뒤로 버튼을 클릭 할 때 ChangeValueHandler가 실행되지 않음 GWT에서

1) 나는 텍스트 상자

2에 텍스트를 입력하는 ChangeValueHandler

addValueChangeHandler(new ValueChangeHandler<String>() {  
    @Override 
    public void onValueChange(ValueChangeEvent<String> event) { 
     setChanged(true); 
    } 
}); 

수신 한 Texbonx을한다고 가정 해 봅시다

3) ValueChangeEvent을 호출하지 않았습니다.

BlurEvent 텍스트 상자에 프로그래밍 방식으로 시도했습니다. textBox.fireEvent(new BlurEvent() { });하지만 여전히 결과가 없습니다.

제안 사항?

답변

0

내가 한 것은 TextBox의 포커스를 False로 설정 한 다음 변경되었는지 확인하여 다시 단추를 누르지 않을 때 TextBox를 강제로 해제하는 것입니다.

는 양식이 문제는 실제로 백 이벤트 그 자체 잡는되지

public boolean isChanged(){ 
    if(formPanel == null) return false;  
    for (int i = 0; i < formPanel.getWidgetCount(); i++) { 
     if(formPanel.getWidget(i) instanceof BaseWidget){ 
      BaseWidget w= (BaseWidget) formPanel.getWidget(i); 
      w.setFocus(false); 
      if(w.isChanged()){ 
       return true; 
      } 
     } 
    } 
    return false; 
} 
1

페이지가 닫히면 (뒤로 단추를 누르거나 페이지를 닫음으로써) 컨트롤에서 이벤트를 발생시키지 않습니다. 가장 먼저 발동되는 것은 window.onbeforeunload으로 사용자에게 데이터 손실에 대해 경고하고 페이지에 머무를 것을 제안 할 수있는 기회를 제공합니다. 사용자가 페이지에 머무르기로 선택하면 해고 예정이었던 모든 이벤트가 실행됩니다 (변경 이벤트가 시작됩니다).

Window.addClosingHandler을 사용하여 네이티브 onbeforeunload 이벤트에 처리기를 연결할 수 있습니다.

Window.addWindowClosingHandler(new ClosingHandler() { 

     @Override 
     public void onWindowClosing(ClosingEvent event) 
     { 
      event.setMessage("If you leave the page now all data will be lost."); 
     } 

}); 

는 그것은 ClosingEvent는 그것이 어떤 상황에서도, onbeforeunload 이벤트를 할 수없는 기본 있다는 지적 가치, 프로그램이 취소 될 수있다. 사용자가 페이지를 떠나지 못하게하는 유일한 방법은 사용자가 위 코드의 결과로 나타나는 팝업에서 "이 페이지에 머문다"를 선택하는 경우입니다.

+0

변경되어 있는지 확인하지만 여부를 확인하기 위해 이벤트를 발생하는 텍스트 상자를 강제로 코드이 변경되었습니다. TextBox에 커서가 있으면 TexBox가 ​​변경되었는지 알 수 없습니다. – outellou

관련 문제