Как получить сообщение об ошибке в StringTemplate?
Как я могу получить сообщение об ошибке времени компиляции из 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 ответ
Вы можете установить прослушиватель ошибок для группы, который позволит вам перехватить ошибку и затем передать ее в пользовательский интерфейс.
Этот ответ расскажет вам больше о реализации 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
}