2016-12-06 82 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