2016-06-03 6 views
0

현재 필드가 변경되면 다른 필드와의 유효성을 검사하려고합니다.Eclipse Scout 네온 값 설정 유효성 검사 루프

기본 아이디어는 내가 필드 A 및 필드 B,C,D,E,...을 가지고 그 분야에 대한 몇 가지 복잡한 종속성 그래프가있는 경우, 나는 그것이 이런 식으로 해결하고 싶은 것입니다 :

  • 나는 값을 수출 양식을 설정하면
  • 양식 데이터 계산 및 해결 스카우트 서버 종속성 그래프에 서버
  • 에게 정찰 보낼 수있는 데이터 (양식의 현재 상태는)
  • 주문 리터의 필드의 전화 setters을 (우리는 순서대로 목록을 가져옵니다) 양식 데이터를 "수정"하는 ist
  • 마지막에 양식 데이터를 가져옵니다.

내 문제는 내가

@Override 
protected void execChangedValue() { 
    // trigger export 
    // trigger server validation 
    // trigger import 
} 

에서이 이벤트를 트리거 만약 내가
2016-06-03 13:31:28,468 WARN scout-model-thread-22 o.e.s.rt.client.ui.form.fields.AbstractValueField - Loop detection in ...$FieldA with value 101191 [m4042 @ ] 
java.lang.Exception: null 

방법이 문제를 해결 할 수 있다는 것입니다?

오류가 다시 발생하면 가져 오기를 중단하고 이전 값을 되돌리려는 경우에도 문제가 발생합니다. 그것은 중요하지 않습니다 무엇 oldValue이다

@Override 
protected void execChangedValue() { 
    // trigger export 
    // trigger server validation 
    if (error) { 
     setValueWithoutTrigger(oldValue) 
    } else { 
     // trigger import 
    } 
} 

, 그것은 null이 될 수 있습니다. (오류시 재설정 값). 방법 setValueWithoutTriggersetValue()와 동일하지만 BSI 코드에서 유사한 기능을 보았 기 때문에 설정 값 전에, 나는 어떻게 든 할 수 알고 this.setValueChangeTriggerEnabled(false);

을했다.

+0

을 설정합니다 importBCDE 메소드 execValidateValue을 사용하는 것입니다 요점을 얻는다. 내가 아는 한, 서버에서 필드 B, C, D 및 E의 값을 계산하려고합니다. 그렇다면 왜 클라이언트에서 execChangedValue() 메서드를 정의해야합니까? –

+0

귀하의 의견을 이해할 수 없습니다. 그렇다면 execChangedValue()가 아니라면 서버 측에서 검사를 트리거할까요? 사용자가 필드 A의 일부 데이터를 변경할 때 서버에서 트리거 유효성 검사를 원하면 클라이언트에서 트리거해야하고 execChangedValue가 올바른 지점처럼 보입니다. –

+0

당신 말이 맞아요. 이제 네 질문을 이해한다. 고맙습니다. –

답변

0

동일한 필드의 execChangedValue 메서드에서 필드 값을 설정할 수 없습니다. 프레임 워크는 여기에서 루프를 감지합니다.

은 당신이 대신 할 수있는 것은

@Override 
protected String execValidateValue(String rawValue) throws ProcessingException { 
    MyFormData formData = new MyFormData(); 
    exportFormData(formData); 
    formData = sendFormDataToServerAndDoValidation(); 
    importBCDE(formData); 
    return formData.getTest().getValue(); 
    } 

방법을 다음과 같이 필드 B, C, D 및 E,하지만 난 '돈없는 필드 A.

+0

그래,하지만 루프를 감지하는 이유는 무엇입니까? (나는 코드를 보았고, 왜 그런지 알지만 ...) 실제로 루프가 없습니다. import가 트리거없이 호출되기 때문에 execValidateValue가 다시 호출되지 않습니다. 루프가 없다는 것을 알기 때문에 루프 탐지를 무시하는 방법이 있습니까? –

+0

'setValueChangeTriggerEnabled (boolean b)'라는 메서드가 있습니다. 그러나 필드가 자체 값을 설정하면이 작업이 수행되지 않습니다. –