如何在StringTemplate中检索错误消息?

时间:2014-12-03 09:55:25

标签: java stringtemplate stringtemplate-4

如何从StringTemplate中检索编译时错误消息?

此代码例如:

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

只会记录类似“无效对我来说完全出乎意料”的内容,但我想在我的界面中显示此错误消息。

我可以ErrorManager访问stg.errMgr。我在这里期待像getErrors()这样的方法,但是没有......

1 个答案:

答案 0 :(得分:2)

您可以为该组设置一个错误侦听器,这将允许您捕获错误,然后从那里将其传递给UI。

This answer告诉您有关实现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
}