如何从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()
这样的方法,但是没有......
答案 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
}