194

テンプレートが処理されるときに値が提供される一連のプレースホルダーを含むFreemarkerテンプレートがあります。userName変数が指定されている場合は、次のように、条件付きでテンプレートの一部を含めたいと思います。

[#if_exists userName]
  Hi ${userName}, How are you?
[/#if_exists]

ただし、FreeMarkerのマニュアルには、if_existsが非推奨であることが示されているようですが、これを実現する別の方法を見つけることができません。もちろん、追加のブール変数isUserNameを簡単に指定して、次のように使用することもできます。

[#if isUserName]
  Hi ${userName}, How are you?
[/#if]

しかし、userNameが存在するかどうかを確認する方法があれば、この余分な変数を追加することを避けることができます。

4

5 に答える 5

341

値が存在するかどうかを確認するには:

[#if userName??]
   Hi ${userName}, How are you?
[/#if]

または、標準のフリーマーカー構文を使用します。

<#if userName??>
   Hi ${userName}, How are you?
</#if>

値が存在し、空でないかどうかを確認するには:

<#if userName?has_content>
    Hi ${userName}, How are you?
</#if>
于 2008-11-20T20:25:21.843 に答える
102

これはより適しているようです:

<#if userName?has_content>
... do something
</#if>

http://freemarker.sourceforge.net/docs/ref_builtins_expert.html

于 2012-07-23T14:15:59.423 に答える
70

また、 if_existsは次のように使用されたと思います。

Hi ${userName?if_exists}, How are you?

userNameがnullの場合は壊れませんが、nullの場合の結果は次のようになります。

Hi , How are you?

if_existsは非推奨になり、デフォルトの演算子に置き換えられました!のように

Hi ${userName!}, How are you?

default演算子は、次のようなデフォルト値もサポートします。

Hi ${userName!"John Doe"}, How are you?
于 2008-11-20T20:33:05.667 に答える
6

多くの人が、変数が存在するかどうかだけでなく、空でないかどうかを確認できるようにしたいと考えています。多くの場合、存在と空をチェックすることは良い考えであり、テンプレートがより堅牢になり、ばかげたエラーが発生しにくくなると思います。つまり、変数を使用する前に変数が null ではなく、空でもないことを確認すると、null 変数または空の文字列のいずれかをテンプレートにスローできるため、テンプレートはより柔軟になり、同じように機能します。どちらの場合にも。

<#if p?? && p?has_content>1</#if>

pそれが単なる空白以上のものであることを確認したいとしましょう。次に、それを確認する前にトリミングできますhas_content

<#if p?? && p?trim?has_content>1</#if>

アップデート

私の提案has_contentは無視してください -- 空のチェックと一緒に null チェックを行うので、必要なのはこれだけです。することp?? && p?has_contentは と同等なp?has_contentので、そのまま使用することもできますhas_content

于 2014-05-12T18:59:35.580 に答える