2011-01-29 2 views
0

우리는 RAP 응용 프로그램에서 Eclipse API를 사용하고 있습니다.이 도구는 Eclipse Modeling Frame Work를 사용합니다. 페이지가 편집되면 모델이 더러워 져서 결과로 저장 버튼이 활성화됩니다.Eclipse-RAP 응용 프로그램에서 유효성 검사 오류가 발생할 때 저장 단추 비활성화

페이지에 오류가있을 때 편집기 페이지의 유효성 검사 플래그를 false로 설정하면 페이지에 빨간색 색조가 표시됩니다. 그러면 일반적으로 저장 버튼도 사용하도록 설정되었습니다.

그러나이 동작을 변경하고 싶습니다. 일부 오류 표시가 페이지에 나타나면 저장 버튼을 활성화하지 않으려 고합니다. 사용자가 오류 단계에서 모델을 저장할 수 없어야합니다. . 저장 버튼을 사용 중지해야합니다. 어떻게해야합니까? 친절히 제 의심을 분명히하십시오.

답변

1

EMF에서 생성 된 편집기는 commandstacklistener를 사용하여 PROP_DIRTY를 실행합니다. 이 속성이 실행되면 기본 프레임 워크는 편집자 #isDirty 메서드에 더티 상태를 묻습니다. 이것은 당신이 당신의 논리를 구현할 수있는 장소입니다.

@Override 
public boolean isDirty() { 
    Diagnostic diagnostic = validateMyModel(); 
    return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded() && diagnostic.getSeverity() == Diagnostic.OK; 
} 

이 경우

은 사용자가 모델에없는-유효 편집을 할 때 에디터가 이미 오염되었을 수는 유스 케이스를 포함하지 않습니다.

하지만 IMHO가 최선의 방법은 아닙니다. 사용자가 편집기를 닫으면 아무런 알림도없이 모델의 모든 변경 사항이 손실되기 때문에 (더티 플래그가 없기 때문에). 그래서 그는 아마도 100 건의 유효 수정을했고, 1 건은 무효가되었고 변경된 모델을 잃어 버렸을 것입니다.

더 좋은 방법은 사용자가 대화 상자를 저장하려는 경우 경고 메시지를 표시하는 것입니다. 이 에디터가 더러운하지 않도록 더러운에서 그 상태를 변경할 수 없습니다 대화 상자에 오류는 사용자가

  • 올바른 모든 또는
  • 편집기를 종료하는 오류에 가지고 있으며, 그의 모든 changens을 푼다 경우

이를 달성하려면 doSave (IProgressMonitor progressMonitor) 메소드에 오류를 표시하는 대화 상자를 구현해야합니다. 더 까다로운 부분은 더티 에디터 닫기의 기본 동작을 무시하는 것입니다. 워크 벤치에 Yes, No 및 Cancel이 포함 된 대화 상자가 표시됩니다. 이 동작을 재정의하려면 editor에서 promptToSaveOnClose() 메서드를 재정의하려면 org.eclipse.ui.ISaveablePart2 인터페이스를 구현해야합니다. 이 방법에서는 모델의 오류를 검사하는 논리가 다시 있어야합니다. 오류가있는 경우이 메서드는 더티 모델에 오류가있는 한 편집기를 닫을 수 없도록 ISaveablePart2.CANCEL을 반환해야합니다.

HTH Tom

+0

내 질문에 대한 우려로 고맙습니다. – VINEEL

관련 문제