2017-01-30 4 views
0

私は、Freemarkerでブールチェックを実行するカスタムディレクティブまたはメソッドを作成しようとしています。Freemarkerディレクティブまたはブール戻り値付きメソッド

<#if foo = 'bar'> 
do something 
</#if> 

<@mycheck 'bar'> 
do somethng 
</@mycheck> 

にequaivilantしなければならない私はすでにFreemarkerのカスタムディレクティブとメソッドで働いたが、私はboolean型の戻りでこれを作成するにはどのような方法を見つけることができませんでした。私が何をしたいのか、それをより明確にする

UPDATE

、次の点を考慮します。私は、それが特定のURLに表示されている場合、テンプレートにチェックしたいです。

ので、代わりのテンプレートに変数を渡すと

<#if location = '/home/bar'> 
do something 
</#if> 

ように私はあなたが任意のリターンを持っていないこの

<@location is='/home/bar'> 
do somethng 
</@location> 

答えて

1

のような、これはもう少し流暢行いたい場合などを経由して確認してくださいそこでの価値(それを出力そのものとみなさない限り)。

<@mycheck 'bar'> 
do somethng 
</@mycheck> 

ソリューション:(あなたはマクロがそれを見ることができます別の場所にデータ・モデルでfooかを持っていると仮定)

<#macro mycheck value> 
    <#if foo == value> 
    <#nested> 
    </#if> 
</#macro> 

してから、この作業をする必要があります:あなたは、このようなマクロを書くことができますTemplateDirectiveModelは非常によく似ていますが、残念ながら引数は少なくとも2.3.25のように名前(<@mycheck expected='bar'>...など)で渡す必要があります。 <#nested>の代わりに、JavaでTemplateDirectiveBody.render(...)を呼び出すだけです。#ifはもちろんJavaのifです。

TemplateMethodModelは、フロー制御ができないため、このような目的には使用できません。

+0

実際には、入力パラメータのプログラムチェックが必要なので、これをディレクティまたはメソッドで行う必要があります。 – svenkubiak

+0

私はそれに対処するために私の答えを更新しました。 – ddekany

+0

ありがとうございます。もう一度モデルをチェックアウトします。モデルがブール値を返さないので、モデルがブールチェックをどのように行うかは、実際にはわかりません。私が見ているモデルでは、テンプレートではなくexecuteメソッドで何かを処理できます。 – svenkubiak

関連する問題