2016-12-06 87 views
0

我有一個Java函數,比如method1(),它在某些條件下引發異常,說條件A.我從條件爲A的FTL文件中調用該函數。現在我在FTL中發現模板錯誤,說上面的函數拋出了一個異常。就像我們用try-catch處理Java中的異常一樣,我想在我的FTL中使用類似的東西。如何在Freemarker中處理Java中拋出的異常?

這與我的FTL代碼類似。

<#-- @ftlvariable name="someUtilClass" type="com.some.package.SomeUtilClass" --> 

    <#attempt> 
     <#assign x = someUtilClass.method1() /> 
    <#recover> 
     <#assign x = '' /> 
    </#recover> 

我正在使用Freemarker 2.3.20。

謝謝。

+0

這可能是相關的:http://stackoverflow.com/questions/15123743/what-are-different-ways-to-handle-error-in-freemarker-template – Berger

+0

@Berger其實我不想處理它在Java端,並且嘗試恢復不起作用。 – sam100rav

+0

我可能是錯的,但AFAIK不能直接在Freemarker模板中使用Java代碼。你需要使用TemplateMethod使它作爲一個方法變量等。所以,如果你還沒有這樣做,這可能是_attemp-recover不工作的原因。你確定你的FTL代碼與此類似嗎? – walen

回答

1

您不應該在模板中處理異常,除非我們計數#attempt - #recover,否則沒有模板語言功能。

由於#attempt - #recover,它捕捉到了異常(我認爲),所以我不知道,當你說,它不工作,你是什麼意思。但是,如果拋出該異常是正常操作的一部分,它將不是一個合適的解決方案,因爲它會在允許模板處理繼續之前將其記錄爲錯誤。它還捕捉所有類型的例外,而不僅僅是您通常期望的例外。這是針對故障情況的,您不希望整個頁面因爲某些面板背後的服務失敗而停止運行。

+0

我已添加sampe FTL代碼。請看一下。 – sam100rav

+0

正如我所說的'#企圖'不是你想要的呢......或者我猜不是。但是,示例代碼出了什麼問題? – ddekany

+0

當方法拋出一個異常時,x沒有被賦值爲空字符串,而是顯示了ftl錯誤。 – sam100rav

相關問題