テンプレートが処理されるときに値が提供されるプレースホルダーの束を含む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が存在するかどうかを確認する方法があれば、この余分な変数を追加するのを避けることができます。
値が存在するかどうかを確認するには:
[#if userName??]
Hi ${userName}, How are you?
[/#if]
または、標準のfreemarker構文を使用します。
<#if userName??>
Hi ${userName}, How are you?
</#if>
値が存在し、空でないかどうかを確認するには:
<#if userName?has_content>
Hi ${userName}, How are you?
</#if>
これはより適しているようです:
<#if userName?has_content>
... do something
</#if>
http://freemarker.sourceforge.net/docs/ref_builtins_expert.html
また、if_existsは次のように使用されたと思います。
Hi ${userName?if_exists}, How are you?
userNameがnullの場合は壊れません。nullの場合の結果は次のとおりです。
Hi , How are you?
if_existsは非推奨になり、デフォルトの演算子に置き換えられました!のように
Hi ${userName!}, How are you?
デフォルト演算子は、次のようなデフォルト値もサポートしています。
Hi ${userName!"John Doe"}, How are you?
多くの人が、変数が空でないかどうか、また変数が存在するかどうかを確認できるようにしたいと考えています。多くの場合、存在と空をチェックすることは良い考えであり、テンプレートをより堅牢にし、愚かなエラーを起こしにくいと思います。つまり、使用する前に変数がnullではなく空でもないことを確認すると、null変数または空の文字列をスローできるため、テンプレートはより柔軟になり、同じように機能しますどちらの場合にも。
<#if p?? && p?has_content>1</#if>
p
が単なる空白以上であることを確認したいとしましょう。その後、has_content
であるかどうかを確認する前に、それをトリミングできます。
<#if p?? && p?trim?has_content>1</#if>
UPDATE
私の提案を無視してください-has_content
が必要なのは、空のチェックとともにnullチェックを行うからです。 p?? && p?has_content
を実行することはp?has_content
と同等であるため、単にhas_content
を使用することもできます。
FreeMarker 2.3.7より前のバージョンの場合
??
を使用して欠損値を処理することはできません。古い構文は次のとおりです。
<#if userName?exists>
Hi ${userName}, How are you?
</#if>