2015-05-06 30 views
1

方案發出錯誤信號:在FreeMarker的

  • 我有一個固定的Java程序,使用FreeMarker的模板
  • 我是一個寫FreeMarker的模板。
  • 在我的一個模板中,我想檢查一個值,如果超出範圍,則嚮應用程序發回錯誤信號。

我該怎麼做?有類似於try/catchattempt/recover機制,但沒有相當於throw。 (stop指令除外)

回答

1

您可以將對象傳遞到freemarker模板中。創建一個保存錯誤值的Signal對象。然後在模板中,當您想要返回錯誤時,請在Signal對象上調用帶有錯誤的set()方法。

然後,當freemarker從處理模板返回時,您的代碼可以檢查Signal對象是否返回錯誤。如有必要,它可以在該點拋出異常。

3

您可以繼承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(); 
    } 

} 

與名"throwMyException"其添加到數據模型(或到#import或到Configuration作爲共享變量),然後在模板你可以這樣做:

<@throwMyException /> 
+0

就是這樣?呵呵,我看到了有關自定義指令的一點,它看起來更加複雜。 –