3

StringTemplate からコンパイル時のエラー メッセージを文字列として取得するにはどうすればよいですか?

たとえば、このコード:

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

「無効になったのは私にとって完全な驚きでした」のようなものを単にログに記録しますが、このエラーメッセージを UI に表示したいと考えています。

ErrorManagerでアクセスできますstg.errMgr。私はここのような方法を期待してgetErrors()いましたが、ありません...

4

1 に答える 1

2

グループにエラー リスナーを設定すると、エラーをキャッチして、そこから UI に渡すことができます。

この回答は、STErrorListener の実装について詳しく説明しています。彼らが提供する例は、ErrorListener 内からチェック例外をスローしているため、コンパイルされません。おそらく、より良いアプローチは、エラーをリスナー内で直接処理することです。または、RuntimeException をスローして、 を呼び出したときにエラーをキャッチできるようにすることもできますstg.defineTemplate(...)

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

RuntimeException をスローした場合、ST を定義するときにそれをキャッチできます。

stg.setListener(new MySTErrorListener());
try{
    CompiledST compiledTemplate = stg.defineTemplate("receipt", "<an invalid template<>");
} catch (Exception e)
{
    // tell the UI about the error
}
于 2014-12-05T18:10:18.917 に答える