场景:
- 我有一个已修复的 Java 程序,它使用 FreeMarker 模板
- 我是 FreeMarker 模板的编写者。
- 在我的一个模板中,我想检查一个值,如果超出范围,则向应用程序发出错误信号。
我该怎么做?有attempt/recover
类似于 try/catch
的机制,但没有与 throw
等效的机制。 (stop
指令除外)
最佳答案
您可以子类化RuntimeException
或TemplateException
,然后在模板内部抛出该异常并在Template.process
外部捕获它。要引发异常,您可以创建一个自定义指令,例如:
public class ThrowMyExceptionDirective implements TemplateDirectiveModel {
@Override
public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body)
throws TemplateException, IOException {
throw new MyTemplateException();
}
}
将其添加到数据模型(或作为共享变量添加到#import
或Configuration
),名称为“throwMyException”
,然后在模板中您可以执行以下操作:
<@throwMyException />
关于java - 在 FreeMarker 中发出错误信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30089413/