场景:

  • 我有一个固定的Java程序,它使用FreeMarker模板
  • 我是编写FreeMarker模板的人。
  • 在我的一个模板中,我想检查一个值,如果值超出范围,则将错误信号发回应用程序。

  • 我怎样才能做到这一点?存在类似于attempt/recover try/catch 机制,但是没有等效于throw的机制。 (而不是stop指令)

    最佳答案

    您可以将RuntimeExceptionTemplateException子类化,然后将该异常抛出到模板中并在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 />
    

    10-04 17:48