2014-12-03 4 views
2

StringTemplate에서 문자열로 컴파일 타임 오류 메시지를 검색하려면 어떻게해야합니까? 예를 들어StringTemplate에서 오류 메시지를 검색하는 방법은 무엇입니까?

이 코드 :

STGroup stg = new STGroup('<', '>'); 
CompiledST compiledTemplate = stg.defineTemplate("receipt", "<an invalid template<>"); 
if (compiledTemplate == null) 
    System.out.println("Template is invalid"); 

단순히 뭔가를 기록합니다 "는 무효 나에게 완전한 놀라움으로왔다"하지만 내 UI에서이 오류 메시지를 표시합니다.

나는 stg.errMgr으로 ErrorManager에 액세스 할 수 있습니다. 여기에 getErrors()과 같은 메소드가있을 것이라고 예상했지만 ...

답변

1

그룹에 대한 오류 수신기를 설정하면 오류를 포착하여 거기에서 UI로 전달할 수 있습니다.

This answer에는 STErrorListener 구현에 대해 자세히 설명되어 있습니다. 그들이 제공하는 예제는 ErrorListener 내에서 검사 된 예외를 던지고 있기 때문에 컴파일되지 않습니다. 아마도 더 나은 접근 방법은 청취자 내부에서 직접 오류를 처리하는 것일 수도 있고, stg.defineTemplate(...)을 호출 할 때 오류를 잡을 수 있도록 RuntimeException을 던질 수도 있습니다.

public class MySTErrorListener implements STErrorListener { 
... 
@Override 
public void compileTimeError(STMessage msg) { 
    // do something useful here, or throw new RuntimeException(msg.toString()) 
} 
... 
} 

당신은 당신이 목표 명세서를 정의 할 때 다음 그것을 잡을 수있는 RuntimeException을 던질 것 인 경우 :이 작품

stg.setListener(new MySTErrorListener()); 
try{ 
    CompiledST compiledTemplate = stg.defineTemplate("receipt", "<an invalid template<>"); 
} catch (Exception e) 
{ 
    // tell the UI about the error 
} 
+0

들으을. 나는 여전히 예외 리스너의 이상한 기본 구현을 가지고 있다고 생각하지만, 다행히도 당신은 실제로 이것을 무시할 수있다. – wvdz