方案發出錯誤信號:在FreeMarker的
- 我有一個固定的Java程序,使用FreeMarker的模板
- 我是一個寫FreeMarker的模板。
- 在我的一個模板中,我想檢查一個值,如果超出範圍,則嚮應用程序發回錯誤信號。
我該怎麼做?有類似於try/catch
的attempt/recover
機制,但沒有相當於throw
。 (stop
指令除外)
方案發出錯誤信號:在FreeMarker的
我該怎麼做?有類似於try/catch
的attempt/recover
機制,但沒有相當於throw
。 (stop
指令除外)
您可以將對象傳遞到freemarker模板中。創建一個保存錯誤值的Signal對象。然後在模板中,當您想要返回錯誤時,請在Signal對象上調用帶有錯誤的set()方法。
然後,當freemarker從處理模板返回時,您的代碼可以檢查Signal對象是否返回錯誤。如有必要,它可以在該點拋出異常。
您可以繼承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();
}
}
與名"throwMyException"
其添加到數據模型(或到#import
或到Configuration
作爲共享變量),然後在模板你可以這樣做:
<@throwMyException />
看起來他們加入這個現在:http://freemarker.org/docs/ref_directive_stop.html
<#stop>
<#stop reason>
就是這樣?呵呵,我看到了有關自定義指令的一點,它看起來更加複雜。 –