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

関連する問題