Freemarkerでのnull値の処理


回答:


98

??テストオペレーターを使用できます。

これは、オブジェクトの属性がnullでないかどうかをチェックします。

<#if object.attribute??></#if>

これは、オブジェクトまたは属性がnullでないかどうかをチェックします。

<#if (object.attribute)??></#if>

出典:FreeMarkerマニュアル


1
このアプローチとhas_contentの違いは何ですか?
アナンドB

3
has_content、nullチェックの横に、値が空でないかどうかもチェックします。これは、文字列、シーケンス、ハッシュ、またはコレクションに対して機能します。オブジェクトが日付、ブール、または数値の場合、空ではないものとして機能します。他のすべてのタイプでは、空として機能します。
Tom Verelst 2012

Beanの値がnullかどうかを確認する必要があるというこの問題があります。次のことを試しました:$ {checknull(Bean.getValue())}、ここで、関数<#function checknull x> <#if x? ?> <#return ""> <#else> <#return x> </#if> </#function>ですが、「マクロの実行中にエラーが発生しました:checknull必須パラメーター:xが指定されていません」というメッセージが表示されます。エラー
Anand B

戻り値を逆にする必要があります:<#function checknull x> <#if x ??> <#return x> <#else> <#return ""> </#if> </#function>
Tom Verelst

1
以下の回答を確認してください: stackoverflow.com/a/27614219/3002336
Anand Varkey Philips 2018

106

freemarker 2.3.7以降、次の構文を使用できます

${(object.attribute)!}

または、属性がnull次の場合にデフォルトのテキストを表示する場合:

${(object.attribute)!"default text"}

1
XDocReportのテンプレートエンジンとしてFreemarkerを使用している場合、これは<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.22</version></dependency>pom.xmlに追加した後に機能します。
ルドビッチギヨーム

日付があり、日付がnullになる可能性がある場合、どのように処理しますか?言い換えると、dateAcquiredがnullであり、$ {object.dateAcquired?date}がある場合のobject.dateAcquired
Stephane Grenier

1
@StephaneGrenierの使用${(object.dateAcquired?date)!"not present"}
Tassos Bassoukos 2017年

1
素晴らしい例です。私を大いに助けてくれました。ただし、ブラケットは廃止されています。 ${salutation!'Dear Mr. or Mrs.'}
Sim0rn 2018

デフォルト値で.now?longを印刷するにはどうすればよいですか?
サンティアゴAceñolaza

4

私はそれが逆に機能すると思います

<#if object.attribute??>
   Do whatever you want....
</#if>

object.attributeがNULLでない場合、コンテンツが印刷されます。


1

ステートメント??の最後に演算子を使用します<#if>

この例nullは、Freemakerテンプレートで2つのリストの値を処理する方法を示しています。

List of cars:
<#if cars??>
    <#list cars as car>${car.owner};</#list>
</#if>
List of motocycles:
<#if motocycles??>
    <#list motocycles as motocycle>${motocycle.owner};</#list>
</#if>

-3

オプションで変換する変数がたくさんある場合は、次のようにSubimeTextを使用できます。

Find: \${([A-Za-z_0-9]*)}
Replace: \$\{${1}!\}

正規表現と大文字と小文字を区別するオプションが有効になっていることを確認してください。

崇高な正規表現の置き換え

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.